利用redis进行商品秒杀

这里是用redis的list集合开发,redis的list集合是具有原子性的,不必担心多线程时会取到重复的数据,即使请求同时到达也会排队进行数据操作

1. 先说说大概思路,关于数据库库存字段的设计.数据类型设置为非负数的unsigned,  如果秒杀的商品数量为50个. 秒杀开始前在redis里面建一个类型为list,键名为goods_num_商品id 的键,存入50个元素.元素值可随意取.

2. 建一个键名为user_id_商品id 的键,每次用户秒杀成功,把用户id存入里面,用来判断是否成功秒杀过.如果成功秒杀过则直接返回提示. 下面贴代码

这里的库存表的增减,可以不写,到秒杀活动结束后再进行数据操作.这只是简单的模拟,真实的业务场景可能会更加的复杂.

原文地址:https://www.cnblogs.com/wushuaiblog/p/8427179.html

时间: 2024-10-05 22:10:40

利用redis进行商品秒杀的相关文章

SpringBoot+RabbitMQ+Redis实现商品秒杀

业务分析 一般而言,商品秒杀大概可以拆分成以下几步: 用户校验 校验是否多次抢单,保证每个商品每个用户只能秒杀一次 下单 订单信息进入消息队列,等待消费 减少库存 消费订单消息,减少商品库存,增加订单记录 付款 十五分钟内完成支付,修改支付状态 创建表 goods_info 商品库存表 列 说明 id 主键(uuid) goods_name 商品名称 goods_stock 商品库存 package com.jason.seckill.order.entity; /** * 商品库存 */ pu

redis解决商品秒杀问题

博主最近在项目中遇到了抢购问题!现在分享下.抢购.秒杀是如今很常见的一个应用场景,主要需要解决的问题有两个:1 高并发对数据库产生的压力2 竞争状态下如何解决库存的正确减少("超卖"问题)对于第一个问题,已经很容易想到用缓存来处理抢购,避免直接操作数据库,例如使用Redis.重点在于第二个问题常规写法:查询出对应商品的库存,看是否大于0,然后执行生成订单等操作,但是在判断库存是否大于0处,如果在高并发下就会有问题,导致库存量出现负数 优化方案1:将库存字段number字段设为unsig

Redis案例——商品秒杀,购物车

秒杀案例: 1 <?php 2 header("content-type:text/html;charset=utf-8"); 3 $redis = new redis(); 4 $result = $redis->connect('10.10.10.119', 6379); 5 $mywatchkey = $redis->get("mywatchkey"); 6 $rob_total = 100; //抢购数量 7 if($mywatchkey&

利用redis List队列简单实现秒杀 PHP代码实现

利用redis List队列简单实现秒杀 PHP代码实现 2018年05月28日 11:37:46 m_nanle_xiaobudiu 阅读数 35674更多 分类专栏: Redis 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/m_nanle_xiaobudiu/article/details/80479666 一 生产者producer部分 ---------------------

用Redis轻松实现秒杀系统

秒杀系统的架构设计 秒杀系统,是典型的短时大量突发访问类问题.对这类问题,有三种优化性能的思路: 写入内存而不是写入硬盘 异步处理而不是同步处理 分布式处理 用上这三招,不论秒杀时负载多大,都能轻松应对.更好的是,Redis能够满足上述三点.因此,用Redis就能轻松实现秒杀系统. 用我这个方案,无论是电商平台特价秒杀,12306火车票秒杀,都不是事:) 下面介绍一下为什么上述三种性能优化思路能够解决秒杀系统的性能问题: 写入内存而不是写入硬盘 传统硬盘的读写性能是相当差的.SSD硬盘比传统硬盘

高并发之商品秒杀系统

基于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')

一篇文章教你如何用 Redis 轻松实现秒杀系统的构思

用 Redis 轻松实现秒杀系统的构思 前言: 秒杀系统的架构设计 秒杀系统,是典型的短时大量突发访问类问题.对这类问题,有三种优化性能的思路: **1. 写入内存而不是写入硬盘. 异步处理而不是同步处理. 分布式处理**用上这三招,不论秒杀时负载多大,都能轻松应对.更好的是,Redis能够满足上述三点.因此,用Redis就能轻松实现秒杀系统. 用我这个方案,无论是电商平台特价秒杀,12306火车票秒杀,都不是事:) 下面介绍一下为什么上述三种性能优化思路能够解决秒杀系统的性能问题: 写入内存而

利用Redis撤销JSON Web Token产生的令牌

利用Redis撤销JSON Web Token产生的令牌 作者:chszs.版权全部.未经允许,不得转载.博主主页:http://blog.csdn.net/chszs 早先的博文讨论了在Angular.js和Node.js中使用jsonwebtoken实现认证授权的案例.这里要说明一下,当用户点击了"注销"button,用户的令牌在Angular端会从授权认证服务AuthenticationService中移除,可是此令牌仍旧是有效的,还能够被攻击者窃取到.用于API调用,直至jso

利用redis setbit和bitmap统计用户数

公司的统计系统接到一个需求,统计时间段内发生过某行为的用户总数.并且时间段的长度是可变的.公司业务用户数量巨大,而且统计系统是实时统计,所以数据的存储.计算效率都需要一个比较好的方案.下面是互联网上的一篇文章,利用redis bitmap. getspool.com的重要统计数据是实时计算的.Redis的bitmap让我们可以实时的进行类似的统计,并且极其节省空间.在模拟1亿2千8百万用户的模拟环境下,在一台MacBookPro上,典型的统计如“日用户数”(dailyunique users)