Redis使用watch完成秒杀抢购功能的代码


Posted in Python onMay 07, 2018

redis使用watch完成秒杀抢购功能:

使用redis中两个key完成秒杀抢购功能,mywatchkey用于存储抢购数量和mywatchlist用户存储抢购列表。

它的优点如下:

1. 首先选用内存数据库来抢购速度极快。

2. 速度快并发自然没不是问题。

3. 使用悲观锁,会迅速增加系统资源。

4. 比队列强的多,队列会使你的内存数据库资源瞬间爆棚。

5. 使用乐观锁,达到综合需求。

我觉得以下代码肯定是你想要的。

<?php 
header("content-type:text/html;charset=utf-8"); 
$redis = new redis(); 
$result = $redis->connect('10.10.10.119', 6379); 
$mywatchkey = $redis->get("mywatchkey"); 
$rob_total = 100;  //抢购数量 
if($mywatchkey<$rob_total){ 
  $redis->watch("mywatchkey"); 
  $redis->multi(); 
  //设置延迟,方便测试效果。 
  sleep(5); 
  //插入抢购数据 
  $redis->hSet("mywatchlist","user_id_".mt_rand(1, 9999),time()); 
  $redis->set("mywatchkey",$mywatchkey+1); 
  $rob_result = $redis->exec(); 
  if($rob_result){ 
    $mywatchlist = $redis->hGetAll("mywatchlist"); 
    echo "抢购成功!<br/>"; 
    echo "剩余数量:".($rob_total-$mywatchkey-1)."<br/>"; 
    echo "用户列表:<pre>"; 
    var_dump($mywatchlist); 
  }else{ 
    echo "手气不好,再抢购!";exit; 
  } 
} 
?>

以上所述是小编给大家介绍的redis使用watch完成秒杀抢购功能的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python递归遍历列表及输出的实现方法
May 19 Python
Python遍历目录并批量更换文件名和目录名的方法
Sep 19 Python
Python使用正则表达式抓取网页图片的方法示例
Apr 21 Python
Python元组操作实例分析【创建、赋值、更新、删除等】
Jul 24 Python
Python实现二维数组按照某行或列排序的方法【numpy lexsort】
Sep 22 Python
利用python如何处理nc数据详解
May 23 Python
python筛选出两个文件中重复行的方法
May 31 Python
python画柱状图--不同颜色并显示数值的方法
Dec 13 Python
对django后台admin下拉框进行过滤的实例
Jul 26 Python
如何解决django-celery启动后迅速关闭
Oct 16 Python
Python 使用type来定义类的实现
Nov 19 Python
Python基础之元编程知识总结
May 23 Python
Python文本统计功能之西游记用字统计操作示例
May 07 #Python
Python中的函数作用域
May 07 #Python
Php多进程实现代码
May 07 #Python
Python格式化输出%s和%d
May 07 #Python
python获取代理IP的实例分享
May 07 #Python
对python使用http、https代理的实例讲解
May 07 #Python
python3 requests中使用ip代理池随机生成ip的实例
May 07 #Python
You might like
php 强制下载文件实现代码
2013/10/28 PHP
phpstrom使用xdebug配置方法
2013/12/17 PHP
PHP与MYSQL中UTF8编码的中文排序实例
2014/10/21 PHP
php页面,mysql数据库转utf-8乱码,utf-8编码问题总结
2015/08/27 PHP
解决php写入数据库乱码的问题
2019/09/17 PHP
PHP 枚举类型的管理与设计知识点总结
2020/02/13 PHP
js 自定义的联动下拉框
2010/02/07 Javascript
Jquery attr(&quot;checked&quot;) 返回checked或undefined 获取选中失效
2013/10/10 Javascript
js验证输入是否为手机号码或电话号码示例
2013/12/30 Javascript
js获取 type=radio 值的方法
2014/05/09 Javascript
js图片滚动效果时间可随意设定当鼠标移上去时停止
2014/06/26 Javascript
jQuery+css实现的蓝色水平二级导航菜单效果代码
2015/09/11 Javascript
详解Bootstrap各式各样的按钮(推荐)
2016/12/13 Javascript
bootstrap fileinput 插件使用项目总结(经验)
2017/02/22 Javascript
ES6正则的扩展实例详解
2017/04/25 Javascript
npm国内镜像 安装失败的几种解决方案
2017/06/04 Javascript
Nodejs之TCP服务端与客户端聊天程序详解
2017/07/07 NodeJs
jQuery实现的简单歌词滚动功能示例
2019/01/07 jQuery
Node.js API详解之 V8模块用法实例分析
2020/06/05 Javascript
解决VUE项目localhost端口服务器拒绝连接,只能用127.0.0.1的问题
2020/08/14 Javascript
vue组件讲解(is属性的用法)模板标签替换操作
2020/09/04 Javascript
[52:37]完美世界DOTA2联赛循环赛 Forest vs DM BO2第一场 10.29
2020/10/29 DOTA
python创建只读属性对象的方法(ReadOnlyObject)
2013/02/10 Python
在RedHat系Linux上部署Python的Celery框架的教程
2015/04/07 Python
Python Numpy 数组的初始化和基本操作
2018/03/13 Python
python3.x提取中文的正则表达式示例代码
2019/07/23 Python
python的re模块使用方法详解
2019/07/26 Python
Python爬虫库BeautifulSoup的介绍与简单使用实例
2020/01/25 Python
python中openpyxl和xlsxwriter对Excel的操作方法
2021/03/01 Python
AmazeUI 列表的实现示例
2020/08/17 HTML / CSS
英国国家美术馆商店:National Gallery
2019/05/01 全球购物
应届生新闻编辑求职信
2013/11/19 职场文书
外贸业务员工作职责
2014/01/06 职场文书
党员创先争优公开承诺书
2014/03/28 职场文书
2015年化妆品销售工作总结
2015/05/11 职场文书
Python matplotlib可视化之绘制韦恩图
2022/02/24 Python