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

PHP秒杀设计

皮奇 PHP开发工程师
难度中级
时长 2小时30分
学习人数
综合评分9.53
20人评价 查看评价
9.6 内容实用
9.6 简洁易懂
9.4 逻辑清晰

讲师回答 / 皮奇
统一减库存一般是Redis集群,本身有高可用方案,挂了一台,Redis的哨兵会把从机器顶替上。可以学习了解一下Redis的集群方案实现

讲师回答 / 皮奇
这是个好问题,可以flock函数加一个非阻塞的文件锁,抢到锁的用户去减本地库存;

讲师回答 / 皮奇
buffer可以多留一些,目的是防止某几台业务机器故障后,库存卖不出去

讲师回答 / 皮奇
rediscluster可以使用,但因为没有统一的proxy代理,查询效率上会打折扣,因此才会有 codis、twproxy等方案出现,而在一线互联网公司,会基于rediscluster上,自研一个proxy

讲师回答 / 皮奇
是的,需要单独写脚本去消费处理队列中数据,队列一般不建议直接使用Redis,因为没有ack机制,一条数据不能保证被可靠的消费,建议使用 kafka队列

讲师回答 / 皮奇
本地存apcu是可行的,或直接用go这种常驻内存语言来做也可以 

讲师回答 / 皮奇
Redis中总库存吗?list也可以实现,但是你得导入数据,较麻烦

讲师回答 / 皮奇
还是PHP操作Redis,执行的是Redis的eval命令,这个命令传入的字符串是lua代码,可以在Redis服务器执行这段lua代码。

讲师回答 / 皮奇
仔细听,强调了需要有订单超时处理机制,避免占用库存长时间不支付的场景出现。而且之所以选择第三个方案原因为对比第一个方案,创建订单等写库耗时操作可以异步化,性能更占优势。

讲师回答 / 皮奇
同学你好, 只是示例代码,不能直接用于生产环境

讲师回答 / 皮奇
apcu只是其中一种本地缓存的方案,本地缓存还可以通过在本地安装redis来实现。opcache 和 apcu 冲突的指的是什么冲突呢?

讲师回答 / 皮奇
同学你好,多机本地减库存后,还需要统一扣库存,也就是后面的redis做统一维护,目的是防止前面的洪峰把redis冲垮。

讲师回答 / 皮奇
这个其实是个高空用的问题,属于运维层面要解决的事情,一般redis不是直连,而是通过vip连接到proxy,proxy再根究切片配置转发到redis实例,每个redis实例是一主多从,读写都在主,主挂了之后会自动通过raft算法选举出一个新的主,用于确保服务的高可用。市面上有比较成熟的解决方案,如codis,可以了解下。

讲师回答 / 皮奇
同学你好,你的思路不错,可以继续去想下直接incrby改会有什么问题,老师提供的思路只是其中一个方案,真正场景实现肯定会有非常多的方案,需要大家自己思考。redis->eval本身就是执行lua脚本,redis->incrby理论上也可以防止边界条件的发生,不会造成超卖,因为incrby就实现了查询+修改的原子操作,但是有一点点小缺点就是,不能做到只要一超卖了就直接终止+1。
首页上一页123下一页尾页
课程须知
1、php 2、redis 3、nginx
老师告诉你能学到什么?
围绕秒杀系统核心实现,掌握高并发的核心解决思路,结合技术全景图提高大家的全局视野

微信扫码,参与3人拼团

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

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

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

举报

0/150
提交
取消