redis秒杀场景解决方案
在大流量程序开发中,必然会遇到高并发的应用的场景。解决方案大致分为两个方向,消息队列、锁.
redis 实现消息队列核心简单版本$key = 'quque';/*** 秒杀商品数量有限,预先存储到消息队列*/public function qnquque() {for($i = 1 ; $i<=5 ;$i++) {$redis->lpush($key,$i);}}/*** 这里省略掉业务逻辑处理,默认业务逻辑处理完,出队列*/public function dequque() {$redis->rpop($key);/***这里开始商品购买后的业务逻辑处理*/}消息队列是防止超买超卖很好的一种解决方案,要实现消息队列的高级功能需要用到专业的消息队列工具例如(rabbitmq).用户Redis 用户redis实现消息队列还是有一些缺点的,可以自行查找文章补充。这边不一一概述。最大问题还是分布式集群的问题。
Redis 乐观锁实现秒杀功能
它的优点如下:
消息队列对内存消耗较大,10000个请求,需要操作10000 出队列。容易造成内存资源瞬间爆棚
使用乐观锁的逻辑,CPU相对来说消耗较低、内存资源占用少$redis = new redis();$result = $redis->connect('127.0.0.1', 6379);$cachekey = $redis->get("cachekey");$number = 100;//抢购数量if($cachekey<$number){$redis->watch("cachekey");$redis->multi();//设置延迟,方便测试效果。sleep(5);//插入抢购数据$redis->hSet("cachekeyList","user_id_".mt_rand(1, 9999),time());$redis->set("cachekey",$cachekey+1);$result = $redis->exec();if($result){$cachekeyList = $redis->hGetAll("cachekeyList");echo "恭喜".$cachekeyList."抢购成功!<br/>";}else{echo "再接再厉";exit;}}更多redis知识请关注redis入门教程栏目。以上就是redis秒杀场景解决方案的详细内容,更多请关注小潘博客其它相关文章!