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. sleep(5);
  12. //插入抢购数据
  13. $redis->hSet("mywatchlist","user_id_".mt_rand(1, 9999),time());
  14. $redis->set("mywatchkey",$mywatchkey+1);
  15. $rob_result = $redis->exec();
  16. if($rob_result){
  17. $mywatchlist = $redis->hGetAll("mywatchlist");
  18. echo "抢购成功!<br/>";
  19. echo "剩余数量:".($rob_total-$mywatchkey-1)."<br/>";
  20. echo "用户列表:<pre>";
  21. var_dump($mywatchlist);
  22. }else{
  23. echo "手气不好,再抢购!";exit;
  24. }
  25. }
  26. ?>
 

redis使用watch完成秒杀抢购功能的更多相关文章

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

    redis使用watch完成秒杀抢购功能: 使用redis中两个key完成秒杀抢购功能,mywatchkey用于存储抢购数量和mywatchlist用户存储抢购列表. 它的优点如下: 1. 首先选用内 ...

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

    redis使用watch完成秒杀抢购功能: 使用redis中两个key完成秒杀抢购功能,mywatchkey用于存储抢购数量和mywatchlist用户存储抢购列表. 它的优点如下: 1. 首先选用内 ...

  3. php结合Redis实现高并发下的秒杀抢购功能

    实现思路 准备两个队列A和B,假设A队列的名称为stock,用于存放商品总库存信息,B队列的名称为users,用于存放抢购成功后的用户信息.每当有用户进行抢购操作时,先从A队列弹出一个元素,如果该元素 ...

  4. flask+redis实现抢购(秒杀)功能

    今天面试了 一家非常高大上的公司,问了我关于redis的实用性问题,但是答的不是很好,所以下午通过再次学习 redis,实现相关实用性功能的一种. 对于抢购功能,难点在于 抢购时 由于高并发请求,导致 ...

  5. TP5使用Redis处理电商秒杀

    本篇文章介绍了ThinkPHP使用Redis实现电商秒杀的处理方法,具有一定的参考价值,希望对学习ThinkPHP的朋友有帮助! TP5使用Redis处理电商秒杀 1.首先在TP5中创建抢购活动所需要 ...

  6. 使用Redis搭建电商秒杀系统

    背景 秒杀活动是绝大部分电商选择的低价促销.推广品牌的方式.不仅可以给平台带来用户量,还可以提高平台知名度.一个好的秒杀系统,可以提高平台系统的稳定性和公平性,获得更好的用户体验,提升平台的口碑,从而 ...

  7. 利用 JS 脚本实现网页全自动秒杀抢购

    利用 JS 脚本实现网页全自动秒杀抢购 倒计时页面: 倒计时未结束时,购买按钮还不能点击. 结束时,可以点击购买,点击后出现提示"付款成功" 展示效果 1.制作测试网页 首先我们来 ...

  8. zookeeper实现商品秒杀抢购

    package com.test; import java.io.IOException; import java.util.List; import java.util.concurrent.Cyc ...

  9. Spring Boot 整合 Redis 和 JavaMailSender 实现邮箱注册功能

    Spring Boot 整合 Redis 和 JavaMailSender 实现邮箱注册功能 开篇 现在的网站基本都有邮件注册功能,毕竟可以通过邮件定期的给用户发送一些 垃圾邮件 精选推荐

随机推荐

  1. Angular2.0快速开始

    参考资料: Angular2.0快速开始 AngularJS2 教程

  2. 项目里面的某个.m文件无法使用

    - 检查:Build Phases -> Compile Sources

  3. 【Alpha版本】冲刺-Day10

    队伍:606notconnected 会议时间:11月18日 会议总结 张斯巍(433) 今天安排:完成剩余界面的设计,小修小补 完成度:100% 遇到的问题:无 感想:因为自己是负责界面美工部分的, ...

  4. Alpha版本十天冲刺——Day 10

    站立式会议 最后一天,很高兴我们做出了跟预期差不多的版本,实现了基本功能,虽然还有一些bug,但是下一阶段我们会继续加油! 会议总结 队员 今天完成 遇到的问题 感想 鲍亮 功能细节更改 我的手机运行 ...

  5. 【Android学习】android:layout_weight的用法实例

    对于android:layout_weight的用法,用下面的例子来说明: <LinearLayout xmlns:android="http://schemas.android.co ...

  6. idea之resource配置

    1.问题 在idea中配置springmvc项目,用hibernate管理数据库,在web.xml中作如下配置: <!--配置hibernate数据库连接--> <listener& ...

  7. (备忘)自定义viewgroup与点击分发事件

    public class ScoreButton extends ViewGroup 在类中重写onTouchEvent方法 @Override public boolean onTouchEvent ...

  8. Cannot find `aapt.exe`. Please install the Android SDK Build-tools package

    Google has updated their SDK tools ("Android SDK Tools" Rev. 23) in a way that also requir ...

  9. java封装好处和原则

    /*封装好处 隐藏实际细节,提供公共的访问方式 提高了代码的复用性 提高安全性 封装原则 将不需要对外提供的内容都隐藏起来 把属性隐藏,提供公共方法对其访问.*/

  10. ACM-ICPC代码模板

    是不是感觉手中的模板都各有缺陷? 要找到好的模板就要集百家之所长, 我在这里贡献出我的代码模板丰富大家的积累. 我的模板能较好的与常见的模板形成互补. 赶快收藏吧,否则以后找不到就不好啦! 另外,想成 ...