最赞回答 / 寻找09之夏
视频中采用for循环测试,这个是有序的,所以不会出现超卖现象;如果并发测试的话,会出现超卖现象;这里提供一个解决思路:活动前定义一个长度为10的list;利用lpop的原子性可以保障不会超卖;就是每次请求先lpop,如果可以获取到值,表示秒杀成功;获取不到说明已抢完。
2019-09-21
最新回答 / IT行业小菜鸟
采用异步的原因是根据实际的业务逻辑,用户只关心是否抢购成功的结果,并不需要详细数据,所以只返回给用户成功或失败的提示,实际队列中的抢购数据一般是通过定时任务由消费者进行消费,定时任务可以是系统级别的crontab,也可以是php的定时器等
2019-09-01
最新回答 / 寻找09之夏
视频中采用for循环测试,这个是有序的,所以不会出现超卖现象;如果并发测试的话,会出现超卖现象;这里提供一个解决思路:活动前定义一个长度为10的list;利用lpop的原子性可以保障不会超卖;就是每次请求先lpop,如果可以获取到值,表示秒杀成功;获取不到说明已抢完。
2019-08-06
最赞回答 / 慕粉0112974
确实会有这样的问题发生,解决方案有两个:1、提前将秒杀数据写入到队列中,比如你写10个随机数(token)进入队列,然后有请求过来的时候,你开始pop这个token,并判断得到的值是否为空,如果为空说明10个token已经被取完了,秒杀结束。因为pop是redis的原始操作,不用担心重复返回相同值的问题。2、在你的消费进程中设置为单线程处理,只处理10个记录。
2019-05-29