redis解决“高并发定时秒杀”库存误差问题
前言:高并发的秒杀活动中,通过查询数据库判断是否还有库存,然后对库存字段进行增减,极易出现库存超出或者库存为负的情况,一般来说有3中解决办法(数据库表加锁,memche缓存,redis队列);
我们这里使用redis来解决问题:
1、思路:
1)触发开始开团的同时,把库存数量更新到id对应的队列上去(定时更新,或者手动更新)
2)用户请求接口,如果队列长度>0,移除一个队列记录,同时对数据库进行相应操作
3)如果队列长度<=0,拦截用户的访问,返回‘无库存’
步骤:
1、后台准点插入记录到redis
$redis = get_redis(); // 1、数据库获取拼团信息 $sql = "select id,title,surplus_num,high_lines,ku_1,ku_2,ku_3,ku_4 from group_goods"; $arr = getrecord_array($sql);//2、删除旧redis队列 foreach ($arr as $key => $value) {//商品id$goods_id = $arr[$key]['id'];$redis->delete('acst_goods_high_lines'.$goods_id); }// 3、准点插入记录到redis foreach ($arr as $key => $value) {//商品id$goods_id = $arr[$key]['id'];//库存数量$num = $arr[$key]['ku_3'];//json转换$in_list = json_encode($arr[$key]);for ($i=0; $i < $num; $i++) { $redis->lpush('acst_goods_high_lines'.$goods_id,$in_list);} }
2、客户端抢购
$redis = get_redis(); //获取队列长度 $leng = $redis->lLen('acst_goods_high_lines'.$goods_id); if($leng>0){ //移除一条记录$redis->lpop('acst_goods_high_lines'.$goods_id);//减去库存---增加成功开团数$sql = "update group_goods set surplus_num = surplus_num-1,mtime = $t,success_num=success_num+20 where id = $goods_id limit 1";exec_db($sql);}else{echojson('已售罄,敬请期待',0); }
转载于:https://www.cnblogs.com/wenlei/p/9159736.html
redis解决“高并发定时秒杀”库存误差问题相关推荐
- Redis解决高并发(秒杀抢红包)
1,Redis 丰富的数据结构(Data Structures) 字符串(String) Redis字符串能包含任意类型的数据 一个字符串类型的值最多能存储512M字节的内容 利用INCR命令簇(IN ...
- Nginx与Redis解决高并发问题
Nginx与Redis解决高并发问题 参考文章: (1)Nginx与Redis解决高并发问题 (2)https://www.cnblogs.com/nucdy/p/5516511.html 备忘一下.
- 如何解决高并发,秒杀问题 1
如何解决高并发,秒杀问题 参考文章: (1)如何解决高并发,秒杀问题 (2)https://www.cnblogs.com/apollo1616/articles/10166870.html 备忘一下 ...
- redis解决高并发问题,如商品秒杀
redis真的是一个很好的技术,它可以很好的在一定程度上解决网站一瞬间的并发量,例如商品抢购秒杀等活动... redis之所以能解决高并发的原因是它可以直接访问内存,而以往我们用的是数据库(硬盘),提 ...
- 如何解决高并发,秒杀问题
相信不少人会被这个问题困扰,分享大家一篇这样的文章,希望能够帮到你! 一.秒杀业务为什么难做? 1)im系统,例如qq或者微博,每个人都读自己的数据(好友列表.群列表.个人信息): 2)微博系统,每个 ...
- 使用Redis解决高并发方案 以及 思路讲解
NoSQL Not Only SQL的简称.NoSQL是解决传统的RDBMS在应对某些问题时比较乏力而提出的. 即非关系型数据库,它们不保证关系数据的ACID特性,数据之间一般没有关联,在扩展上就非常 ...
- springboot中使用Redis解决高并发的方法
一.集成redis 1.引入redis的依赖 <dependency><groupId>org.springframework.boot</groupId>< ...
- SpringBoot: Redis 模拟高并发商品秒杀测试
秒杀系统的架构设计 秒杀系统,是典型的短时大量突发访问类问题.对这类问题,有三种优化性能的思路: 写入内存而不是写入硬盘 异步处理而不是同步处理 分布式处理 用上这三招,不论秒杀时负载多大,都能轻松应 ...
- 91免费视频Redis+Lua解决高并发场景在线秒杀问题
为何要使用Lua脚本解决商品超卖的问题呢? Redis在2.6版本后原生支持Lua脚本功能,允许开发者使用Lua语言编写脚本传到Redis中执行. 将复杂的或者多步的redis操作,写为一个脚本,一次 ...
最新文章
- docker镜像的备份和恢复
- 现在学java还是python好_该学Java还是Python?
- Linux下tmp文件夹的文件自动删除的问题(转)
- SAP CRM WebClient UI搜索结果界面的扩展字段显示
- js实现数组降维算法[不准用Array.prototype.flat的api]
- 草稿 datagridview的显示与修改
- VS2012下基于Glut OpenGL显示一些立体图形示例程序:
- 转:基于Jmeter的MQTT测试插件
- 【HTML+PHP+SQL】综合实验:一个简单丑陋的论坛网站(实现用户注册、登录、注销、修改信息、留言等功能)
- avi格式如何转换成mp4格式
- MODBUS-RTU协议主机和从机代码STM32 包含2个程序代码,主机和从机
- 金蝶云苍穹 通用图控件
- 安卓默认打开指定apk的无障碍权限
- 【渝粤教育】21秋期末考试国际私法10216k1
- Oracle 数据库表中已有重复数据添加唯一键(唯一约束)
- 北大青鸟 JQuery 制作特效 第一章 课后简答题
- 【深度学习入门基础】一、从线性代数和微积分的角度看神经网络
- 如何使用SSM框架开发一套WEB薪资管理系统
- 新手建站免费空间及其使用体验
- java后台批量下载文件压缩ZIP
热门文章
- php 基础函数写法,字符串,常用函数
- 使用Javascript来实现的超炫组织结构图(Organization Chart)
- Python Numpy 教程(使用 Jupyter 和 Colab)
- LIST OF CITIES FOR POTENTIAL VISIT IN SOUTHERN UK
- 家长对孩子的期望 from father
- English debate sample motion
- how to become a good teacher
- if you have something important on the clean my mac
- C#与U3D中字符串尾0
- U3D Debug.log的问题