高并发之商品秒杀系统

基于redis

利用redis的乐观锁,实现秒杀系统的数据同步(基于watch实现)

用户一:

import redis

conn = redis.Redis(host=‘127.0.0.1‘,port=6379)

# conn.set(‘count‘,1000)

with conn.pipeline() as pipe:

    # 先监视,自己的值没有被修改过
    conn.watch(‘count‘)

    # 事务开始
    pipe.multi()
    old_count = conn.get(‘count‘)
    count = int(old_count)
    input(‘我考虑一下‘)
    if count > 0:  # 有库存
        pipe.set(‘count‘, count - 1)

    # 执行,把所有命令一次性推送过去
    pipe.execute()
    ret = pipe.execute()
    print(type(ret))
    print(ret)

用户二:

import redis

conn = redis.Redis(host=‘127.0.0.1‘,port=6379)

with conn.pipeline() as pipe:

    # 先监视,自己的值没有被修改过
    conn.watch(‘count‘)

    # 事务开始
    pipe.multi()
    old_count = conn.get(‘count‘)
    count = int(old_count)
    if count > 0:  # 有库存
        pipe.set(‘count‘, count - 1)

    # 执行,把所有命令一次性推送过去
    ret=pipe.execute()
    print(type(ret))

注:windows下如果数据被修改了,不会抛异常,只是返回结果的列表为空,mac和linux会直接抛异常

秒杀系统核心逻辑测试,创建100个线程并发秒杀

import redis
from threading import Thread

def choose(name, conn):
    # conn.set(‘count‘,10)
    with conn.pipeline() as pipe:
        # 先监视,自己的值没有被修改过
        conn.watch(‘count‘)
        # 事务开始
        pipe.multi()
        old_count = conn.get(‘count‘)
        count = int(old_count)
        # input(‘我考虑一下‘)
        # time.sleep(random.randint(1, 2))
        if count > 0:  # 有库存
            pipe.set(‘count‘, count - 1)

        # 执行,把所有命令一次性推送过去
        ret = pipe.execute()
        print(ret)
        if len(ret) > 0:
            print(‘第%s个人抢购成功‘ % name)
        else:
            print(‘第%s个人抢购失败‘ % name)

if __name__ == ‘__main__‘:
    conn = redis.Redis(host=‘127.0.0.1‘, port=6379)
    for i in range(100):

        t = Thread(target=choose, args=(i, conn))
        t.start()

原文地址:https://www.cnblogs.com/zhangshengxiang/p/10438314.html

时间: 2024-10-03 18:14:13

高并发之商品秒杀系统的相关文章

电商商品秒杀系统架构分析与实战

网址:http://my.oschina.net/xianggao/blog/524943 0 系列目录 1 秒杀业务分析 2 秒杀技术挑战 3 秒杀架构原则 4 秒杀架构设计 4.1 前端层设计 4.2 站点层设计 4.3 服务层设计 4.4 数据库设计 4.4.1 基本概念 4.4.2 设计思路 5 大并发带来的挑战 5.1 请求接口的合理设计 5.2 高并发的挑战:一定要“快” 5.3 重启与过载保护 6 作弊的手段:进攻与防守 6.1 同一个账号,一次性发出多个请求 6.2 多个账号,一

电商项目:商品秒杀系统个人理解

秒杀是电商平台的一种品牌推广.促销的一个高并发短时间的一个活动.可以提高用户体验度和提高品牌知名度,会在活动开始之前大力宣传,假如促销一百件商品,可能会吸引一万个用户同时在一个页面不断刷新,这里可以用freemarker生成静态页,通过ajax动态获取必需的数据,等待活动时间开始,但是如果只在静态页进行对按钮的限制,可能会出现有些用户修改电脑时间.前端js,导致出现提前抢购的情况.我们采用的解决方案是在后台也进,从页面去进行抢购要快得多,我们通过定时器,在活动开始的时候生成一个随机字符串组成的密

JavaEE秒杀系统实战应用(百度网盘)

课程目录 第01课00.秒杀系统项目需求分析 00:09:50 第02课01.秒杀系统项目说明 00:05:52 第03课02.秒杀系统-基础回顾Mybatis讲解1 00:36:16 第04课03.秒杀系统-基础回顾Mybatis讲解200:13:33 第05课04.秒杀系统-基础回顾Mybatis讲解300:31:40 第06课05.秒杀系统-基础回顾SpringMVC讲解00:21:19 第07课06.秒杀系统-数据库设计100:26:42 第08课07.秒杀系统-数据库设计200:21:

秒杀系统企业级实战应用之真实工业界案例

下载地址:百度网盘下载 目录: 第01课.秒杀系统项目需求分析  00:09:50   第02课.秒杀系统项目说明  00:05:52   第03课.秒杀系统-基础回顾Mybatis讲解1  00:36:16   第04课.秒杀系统-基础回顾Mybatis讲解200:13:33   第05课.秒杀系统-基础回顾Mybatis讲解300:31:40   第06课.秒杀系统-基础回顾SpringMVC讲解00:21:19   第07课.秒杀系统-数据库设计100:26:42   第08课.秒杀系统-

2017-5-26/描述一个高性能高可靠的网站架构——如何设计一个秒杀系统

一.秒杀的应用场景 电商网站的抢购活动.12306网站的抢票.抢红包. 二.秒杀的特点 1.秒杀时大量用户会在同一时间同时进行抢购,网站瞬时访问流量激增. 2.数据库的并发读写冲突以及资源的锁请求冲突非常严重. 3.秒杀一般是访问请求数量远远大于库存数量,只有少部分用户能够秒杀成功. 三.秒杀架构的原则 1.将请求拦截在系统上游,降低下游压力:秒杀系统特点是并发量极大,请求都压倒了后端数据层,但实际秒杀成功的请求数量却很少.所以如果不在前端拦截很可能造成数据库读写锁冲突严重,并发高响应慢,甚至导

秒杀系统实现高并发的优化

一:先上代码,看着代码学习效率更好:https://github.com/3218870799/Seckill 二:高并发问题就是指在同一个时间点,有大量用户同时访问URL地址,比如淘宝双11都会产生高并发. 三:高并发带来的后果 服务端??导致站点服务器.DB服务器资源被占满崩溃.??数据的存储和更新结果和理想的设计不一致. 用户角度??尼玛,网站这么卡,刷新了还这样,垃圾网站,不玩了 四:阻碍服务速度的原因 1:事物行级锁的等待:java的事务管理机制会限制在一次commit之前,下一个用户

关于高并发和秒杀系统,你知道的和不知道的一些事

这篇文章也算是对于课程 <PHP秒杀系统 高并发高性能的极致挑战> 的一个整理,视频之外的另外一种形式吧. 大家也许开发过高并发的系统或者秒杀程序,但肯定都有接触过,像电商平台的秒杀.抢购等活动,还有12306春运抢票. 互联网公司,做一些有奖活动,而且数量有限,奖品给力,如果是先到先得的策略,那就类似秒杀系统了. 这类系统最大的问题就是活动周期短,瞬间流量大(高并发),很少人可以成功下单,绝大多数人都是很遗憾.所以从运营体验上,没有成功下单的人,心里肯定是不好受的,如果这时候,因为技术.网络

全流程开发 GO实战电商网站高并发秒杀系统

获取资源点击这里:全流程开发 GO实战电商网站高并发秒杀系统 第1章 课程介绍[学前须知] 本章对这门课程进行说明,包括:秒杀系统涉及模块的介绍,秒杀核心的知识点的介绍,课程的学习规划等. 1-1 课程介绍试看 第2章 需求整理&系统设计 [明确需求] 本章对秒杀系统整体需求进行梳理,明确系统具体需求,讲解系统原型设计工具的使用,并结合秒杀系统进行整体架构设计. 2-1 需求分析 2-2 系统架构设计 2-3 [总结&扩展]需求整理&系统设计 2-4 [勤于思考,夯实学习成果]阶段

高并发秒杀系统--课程总结与思考

[高并发秒杀系统的开发流程及技术要点] DAO层 1.数据库设计和实现,手写DDL 2.Mybatis理解和使用技巧,主配置,XML中SQL的编写 3.Mybatis与Spring的整合,包扫描,DAO实现,别名识别 Servcie层 4.业务接口的设计和封装,使用者角度设计接口 5.SpringIOC配置技巧,注解+XML 6.Spring声明式是事务使用和理解 Web层 7.Restful接口运用 8.SpringMVC的使用技巧 9.前端交互分析过程 10.Bootstrap和JS的使用,