博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
redis使用watch完成秒杀抢购功能(转)
阅读量:6416 次
发布时间:2019-06-23

本文共 863 字,大约阅读时间需要 2 分钟。

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

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

它的优点如下:

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

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

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

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

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

 

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

 

[php]   
 
 
  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<$rob_total){  
  8.     $redis->watch("mywatchkey");  
  9.     $redis->multi();  
  10.       
  11.     //设置延迟,方便测试效果。  
  12.     sleep(5);  
  13.     //插入抢购数据  
  14.     $redis->hSet("mywatchlist","user_id_".mt_rand(1, 9999),time());  
  15.     $redis->set("mywatchkey",$mywatchkey+1);  
  16.     $rob_result = $redis->exec();  
  17.     if($rob_result){  
  18.         $mywatchlist = $redis->hGetAll("mywatchlist");  
  19.         echo "抢购成功!<br/>";  
  20.         echo "剩余数量:".($rob_total-$mywatchkey-1)."<br/>";  
  21.         echo "用户列表:<pre>";  
  22.         var_dump($mywatchlist);  
  23.     }else{  
  24.         echo "手气不好,再抢购!";exit;  
  25.     }  
  26. }  
  27. ?>  

转载地址:http://vnpra.baihongyu.com/

你可能感兴趣的文章
图解微服务架构演进
查看>>
SQL PATINDEX 详解
查看>>
一些常用的网络命令
查看>>
CSP -- 运营商内容劫持(广告)的终结者
查看>>
DIV+CSS命名规范有助于SEO
查看>>
js生成二维码
查看>>
C指针练习
查看>>
web项目buildPath与lib的区别
查看>>
php对redis的set(集合)操作
查看>>
我的友情链接
查看>>
ifconfig:command not found的解决方法
查看>>
js使用正则表达式判断手机和固话格式
查看>>
计算机是怎么存储数字的
查看>>
Codeforces Round #369 (Div. 2) A. Bus to Udayland 水题
查看>>
adb上使用cp/mv命令的替代方法(failed on '***' - Cross-device link解决方法)
查看>>
C++标准库简介、与STL的关系。
查看>>
Spring Boot 3 Hibernate
查看>>
查询EBS请求日志的位置和名称
查看>>
大型机、小型机、x86服务器的区别
查看>>
J2EE十三个规范小结
查看>>