您好,欢迎来到六三科技网。
搜索
您的当前位置:首页redis秒杀场景解决方案

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入门教程栏目。

Copyright © 2019- xue63.com.cn 版权所有

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务