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中SQLAlchemy排序的一个坑
Feb 24 Python
tf.truncated_normal与tf.random_normal的详细用法
Mar 05 Python
python读取一个目录下所有txt里面的内容方法
Jun 23 Python
用于业余项目的8个优秀Python库
Sep 21 Python
对python:print打印时加u的含义详解
Dec 15 Python
Python设计模式之解释器模式原理与用法实例分析
Jan 10 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
Jun 26 Python
Django使用Jinja2模板引擎的示例代码
Aug 09 Python
Python Django view 两种return的实现方式
Mar 16 Python
Python基于pip实现离线打包过程详解
May 15 Python
python 如何快速复制序列
Sep 07 Python
python tqdm库的使用
Nov 30 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调用mysql存储过程
2007/02/14 PHP
深入解析PHP中逗号与点号的区别
2013/08/05 PHP
php使用base64加密解密图片示例分享
2014/01/20 PHP
PHP命令行脚本接收传入参数的三种方式
2014/08/20 PHP
php实现生成验证码实例分享
2016/04/10 PHP
zend框架实现支持sql server的操作方法
2016/12/08 PHP
Jquery iframe内部出滚动条
2010/02/11 Javascript
始终在屏幕中间显示Div的代码(css+js)
2011/03/10 Javascript
jquery中的$(document).ready()使用小结
2014/02/14 Javascript
再谈Jquery Ajax方法传递到action(补充)
2014/05/12 Javascript
js加密解密字符串可自定义密码因子
2014/05/13 Javascript
轻松学习jQuery插件EasyUI EasyUI表单验证
2015/12/01 Javascript
jQuery操作iframe中js函数的方法小结
2016/07/06 Javascript
js中获取键盘事件的简单实现方法
2016/10/10 Javascript
NodeJS使用formidable实现文件上传
2016/10/27 NodeJs
js 获取图像缩放后的实际宽高,位置等信息
2017/03/07 Javascript
微信小程序 获取session_key和openid的实例
2017/08/17 Javascript
jQuery实现切换隐藏与显示同时切换图标功能
2017/10/29 jQuery
JavaScript代理模式原理与用法实例详解
2020/03/10 Javascript
微信小程序实现点击生成随机验证码
2020/09/09 Javascript
[24:42]VP vs TNC Supermajor小组赛B组 BO3 第三场 6.2
2018/06/03 DOTA
python实现计算资源图标crc值的方法
2014/10/05 Python
Python对象中__del__方法起作用的条件详解
2018/11/01 Python
对Python3 序列解包详解
2019/02/16 Python
11个Python Pandas小技巧让你的工作更高效(附代码实例)
2019/04/30 Python
python logging模块的使用总结
2019/07/09 Python
numpy.linalg.eig() 计算矩阵特征向量方式
2019/11/29 Python
HTML5 Notification(桌面提醒)功能使用实例
2014/03/17 HTML / CSS
Html5适配iphoneX刘海屏的简单实现
2019/04/09 HTML / CSS
飞利浦西班牙官方网站:Philips西班牙
2020/02/17 全球购物
北京华建集团SQL面试题
2014/06/03 面试题
上海天奕面试题笔试题
2015/04/19 面试题
财务会计专业毕业生自荐信
2013/10/02 职场文书
2015年政府采购工作总结
2015/05/21 职场文书
《中华上下五千年》读后感3篇
2019/11/29 职场文书
如何将JavaScript将数组转为树形结构
2021/06/02 Javascript