摘要:在大流量程序开发中,必然会遇到高并发的应用的场景。乐观锁实现秒杀功能它的优点如下消息队列对内存消耗较大,个请求,需要操作出队列。需要结合实际的业务场景嵌入本文的核心实现逻辑。
在大流量程序开发中,必然会遇到高并发的应用的场景。解决方案大致分为两个方向,消息队列、锁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."抢购成功!结尾
"; }else{ echo "再接再厉"; exit; } }
本文并没有从零开始业务分析,都是核心的业务逻辑代码。需要结合实际的业务场景嵌入本文的核心实现逻辑。嘿嘿~
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/37120.html
摘要:在大流量程序开发中,必然会遇到高并发的应用的场景。乐观锁实现秒杀功能它的优点如下消息队列对内存消耗较大,个请求,需要操作出队列。需要结合实际的业务场景嵌入本文的核心实现逻辑。 在大流量程序开发中,必然会遇到高并发的应用的场景。解决方案大致分为两个方向,消息队列、锁 redis 实现消息队列核心简单版本 $key = quque; /** ...
摘要:一为什么难秒杀系统难做的原因库存只有一份,所有人会在集中的时间读和写这些数据。又例如抢票,亦与秒杀类似,瞬时流量更甚。 一、为什么难 秒杀系统难做的原因:库存只有一份,所有人会在集中的时间读和写这些数据。例如小米手机每周二的秒杀,可能手机只有1万部,但瞬时进入的流量可能是几百几千万。又例如12306抢票,亦与秒杀类似,瞬时流量更甚。 主要需要解决的问题有两个: 高并发对数据库...
摘要:一为什么难秒杀系统难做的原因库存只有一份,所有人会在集中的时间读和写这些数据。又例如抢票,亦与秒杀类似,瞬时流量更甚。 一、为什么难 秒杀系统难做的原因:库存只有一份,所有人会在集中的时间读和写这些数据。例如小米手机每周二的秒杀,可能手机只有1万部,但瞬时进入的流量可能是几百几千万。又例如12306抢票,亦与秒杀类似,瞬时流量更甚。 主要需要解决的问题有两个: 高并发对数据库...
摘要:由于单线程,可以避免并发问题,保证不会出错,而且毫秒级性能计数功能应该是最适合的使用场景之一了,因为它高频率读写的特征可以完全发挥作为内存数据库的高效。 redis简介 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、...
摘要:由于单线程,可以避免并发问题,保证不会出错,而且毫秒级性能计数功能应该是最适合的使用场景之一了,因为它高频率读写的特征可以完全发挥作为内存数据库的高效。 redis简介 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、...
阅读 2770·2021-10-20 13:46
阅读 2423·2021-08-12 13:22
阅读 2478·2019-08-30 15:54
阅读 2223·2019-08-30 15:53
阅读 427·2019-08-30 13:47
阅读 2575·2019-08-27 14:27
阅读 3170·2019-08-27 11:06
阅读 3463·2019-08-23 16:56