加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

redis使用watch完成秒杀抢购功能(转)

发布时间:2020-12-13 21:23:33 所属栏目:PHP教程 来源:网络整理
导读:redis使用watch完成秒杀抢购功能: 使用redis中两个key完成秒杀抢购功能,mywatchkey用于存储抢购数量和mywatchlist用户存储抢购列表。 它的优点如下: 1. 首先选用内存数据库来抢购速度极快。 2. 速度快并发自然没不是问题。 3. 使用悲观锁,会迅速增加系统

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

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

它的优点如下:

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

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

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

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

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

?

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

?
  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. ?>??

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读