redis使用watch完成秒杀抢购功能
2015-11-26 00:00
751 查看
redis使用watch完成秒杀抢购功能:
使用redis中两个key完成秒杀抢购功能,mywatchkey用于存储抢购数量和mywatchlist用户存储抢购列表。
它的优点如下:
1. 首先选用内存数据库来抢购速度极快。
2. 速度快并发自然没不是问题。
3. 使用悲观锁,会迅速增加系统资源。
4. 比队列强的多,队列会使你的内存数据库资源瞬间爆棚。
5. 使用乐观锁,达到综合需求。
我觉得以下代码肯定是你想要的。
使用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作者谈Redis应用场景
- Kafka+Spark Streaming+Redis实时计算整合实践
- Kafka+Spark Streaming+Redis实时计算整合实践
- Kafka+Spark Streaming+Redis实时计算整合实践
- Redis 学习笔记3-排序
- linux下利用elk+redis 搭建日志分析平台教程
- Redis解决强制关闭Redis快照导致不能持久化错误
- redis的小测试工程
- redis 学习,没事的时候看看增长知识面
- redis 3.0 入门
- Spring Data Redis简介以及项目Demo,RedisTemplate和 Serializer详解
- redis基础
- redis:-ERR max number of clients reached错误
- 基于Redis实现分布式锁以及任务队列
- redis模拟微博用户关系
- 破解C++ Redistributable Package版本之谜
- redis 集群方案
- Redis命令操作详解
- Redis在游戏开发中的应用
- Linux上的Redis的安装和部署