为了账号安全,请及时绑定邮箱和手机立即绑定

PHP消息队列实现及应用

Wicon PHP开发工程师
难度中级
时长 1小时14分
学习人数
综合评分9.73
62人评价 查看评价
9.8 内容实用
9.8 简洁易懂
9.6 逻辑清晰

最新回答 / IT行业小菜鸟
采用异步的原因是根据实际的业务逻辑,用户只关心是否抢购成功的结果,并不需要详细数据,所以只返回给用户成功或失败的提示,实际队列中的抢购数据一般是通过定时任务由消费者进行消费,定时任务可以是系统级别的crontab,也可以是php的定时器等

最新回答 / Yirrran
 考虑后期维护没?这不叫多此一举,MVC更特么多此“几”举。还不是为抽象概念,让当前操作后后期操作的人能看的懂。 
lpop后应该是lpush才能会到原位置把?

最新回答 / 寻找09之夏
视频中采用for循环测试,这个是有序的,所以不会出现超卖现象;如果并发测试的话,会出现超卖现象;这里提供一个解决思路:活动前定义一个长度为10的list;利用lpop的原子性可以保障不会超卖;就是每次请求先lpop,如果可以获取到值,表示秒杀成功;获取不到说明已抢完。
大量处理数据时,上面的锁定方法其实还是没办法锁定数据,避免数据重复处理
https://www.cnblogs.com/dump/p/8243868.html

跟这篇文章一模一样
这课程是那种点到即止的类型,只能了解下概念,讲的太浅了

最新回答 / 侏儒冰法
以课程案例为例,前10个秒杀成功,这个结果是实时的,可以直接返给前端。实际项目时,也是在得到秒杀成功的标识之后,才进行后续的付款操作。
讲的还是很不错的,理论入门容易理解
大致说一下吧,为了防止超卖现象,这个应该改良一下。
也就是说比如说你是限购100个货物,那就先建一个包含100个数据的队列,然后抢购的时候用lpop排出该队列里面的元素,如果排出成果,就降这个用户的id之类的信息插入另一个队列,如果排出失败,直接返回抢购失败一类的,大致上应该是这样,也就是说用2个队列来实现秒杀系统,防止超卖。

最赞回答 / 慕粉0112974
确实会有这样的问题发生,解决方案有两个:1、提前将秒杀数据写入到队列中,比如你写10个随机数(token)进入队列,然后有请求过来的时候,你开始pop这个token,并判断得到的值是否为空,如果为空说明10个token已经被取完了,秒杀结束。因为pop是redis的原始操作,不用担心重复返回相同值的问题。2、在你的消费进程中设置为单线程处理,只处理10个记录。
课程所需库文件:http://pan.baidu.com/s/1bQg038 老师这个链接已经失效,请问能否再分享一次,顺便源码也分享下!

最新回答 / secrethaha
你 在shell 脚本里 php命令要写绝对路径 crontab 不识别环境变量
【Intance】是个什么鬼?视频中念了十几遍,居然还没有发现错误,看来P主记忆中这个单词就是这么拼的。正确=【Instance】
老师是东北那疙瘩的吧
这个明显是不对的,,数量判断用len是不对的。。同时两个人读取到是9,,然后都rpush,,队列中已经11个人啦。。应该是先存入队列,然后再lpop消耗。。避开了数量判断这个并发性问题。。
课程须知
1.掌握PHP基础知识 2.使用过Redis技术做缓存 3.有简单的Linux命令基础,如cd、sudo、apt、Vim
老师告诉你能学到什么?
1.队列是个什么东西,他能干什么 2.队列的应用场景有哪些 3.如何使用队列对业务进行解耦 4.如何使用Redis队列来消除高压力 5.专业的队列系统RabbitMQ如何来使用 课程所需库文件:http://pan.baidu.com/s/1bQg038

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

举报

0/150
提交
取消