章节
问答
课签
笔记
评论
占位
占位
今日不再显示

下一节课程: RabbitMQ (13:41) 下一节 重新观看

3 秒后播放下一节

为你推荐

Wicon
PHP开发工程师

Wicon Wang,新浪PHP高级工程师,曾就职于中国新闻网,主要从事PHP产品快速开发工作。精通PHP相关技术,擅长使用Yaf、Yii、CodeIgniter进行快速开发、将Web相关如Javascript、Redis、Shell、Python等多领域技术结合使用,致力构建快速、易扩展、高性能的Web产品。参与过CodeIgniter、PHPCMS、LUlUCMS等多个项目的内测和贡献。

提问题

写笔记

代码语言
公开笔记
提交
加群二维码

打开微信扫码自动绑定

您还未绑定服务号

绑定后可得到

  • · 粉丝专属优惠福利
  • · 大咖直播交流干货
  • · 课程更新,问题答复提醒
  • · 账号支付安全提醒

收藏课程后,能更快找到我哦~

使用 Ctrl+D 可将课程添加到书签

邀请您关注公众号
关注后,及时获悉本课程动态

举报

0/150
提交
取消
全部 精华 我要发布

最赞回答 / 慕数据2195987
还要提供一个计数器队列总数是10,弹出一个就减去1

最赞回答 / 寻找09之夏
视频中采用for循环测试,这个是有序的,所以不会出现超卖现象;如果并发测试的话,会出现超卖现象;这里提供一个解决思路:活动前定义一个长度为10的list;利用lpop的原子性可以保障不会超卖;就是每次请求先lpop,如果可以获取到值,表示秒杀成功;获取不到说明已抢完。

最新回答 / 寻找09之夏
视频中采用for循环测试,这个是有序的,所以不会出现超卖现象;如果并发测试的话,会出现超卖现象;这里提供一个解决思路:活动前定义一个长度为10的list;利用lpop的原子性可以保障不会超卖;就是每次请求先lpop,如果可以获取到值,表示秒杀成功;获取不到说明已抢完。

最新回答 / 侏儒冰法
以课程案例为例,前10个秒杀成功,这个结果是实时的,可以直接返给前端。实际项目时,也是在得到秒杀成功的标识之后,才进行后续的付款操作。

最赞回答 / 慕粉0112974
确实会有这样的问题发生,解决方案有两个:1、提前将秒杀数据写入到队列中,比如你写10个随机数(token)进入队列,然后有请求过来的时候,你开始pop这个token,并判断得到的值是否为空,如果为空说明10个token已经被取完了,秒杀结束。因为pop是redis的原始操作,不用担心重复返回相同值的问题。2、在你的消费进程中设置为单线程处理,只处理10个记录。

最新回答 / 蚂蚁2018
老师的代码是是,插入失败的话,还是放在队列的头部,顺序依旧保持不变,下一次循环还是会继续取出进行插入的。

最赞回答 / 慕姐936777
2个只是测试,如果瞬间有十万个请求(或者更多),存值那块会不会卡住。用redis先存起来(内存操作,速度很快),以后在慢慢存到数据库,

最新回答 / 慕少4427295
队列里的数据时异步处理的,然后存进数据库,但是他访问那个连接的时候就相当于多个用户去秒杀了,输出的结果(成功或者结束)就实时的反应了是否秒杀成功。

已采纳回答 / qq_欧尼酱_3
我也这么想的,肯定是他写错了,口里说的插入左边,写的RPUSH插入右边。。。

最新回答 / 慕姐936777
redis是单线程,瞬时100个客户端请求过来,还是一条条加入队列,不会一次性进入100个

最新回答 / 回首已是千年
按照课程的讲法的意思,在pop的时候设置了seelp(2) 两秒钟执行一次pop, 因为秒杀的时候速度非常的快,最多只是微妙数不同,其实在这pop的时间间隔内队列中早已插入了限定的元素个数了不会在插入元素了,也就是说这个时候前端对于秒杀已经判断好了。也就是说已经结束了。这个时候后面在对这十个元素进行入库操作。

最赞回答 / MiraclesGG
因为开始已经在终端执行了一个读取redis缓存的文件,这个PHP文件里面写的是死循环,每2秒读取一次redis的队列。所以后面看到的数据是2秒一次添加进去的。
全部 我要发布
最热 最新
只看我的

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

账号登录 验证码登录

遇到问题
忘记密码

代码语言