为啥如今php做秒杀都用redis,mysql的悲观锁不一样可以解决超卖问题吗 ?
解决超卖只是秒杀的一小部分啊,重要的是,如果你不限流直接让秒杀的库存操作进入业务系统甚至数据库,你确定你的业务系统和数据库能撑住?而秒杀接入redis很靠前,不过是做令牌系统还是库存操作,都可以帮你拦截住大量的大量的无效或者无库存后的请求进入后段业务系统
都可以实现,但主要看需求,就像回家的路有大路和小路之分,喜欢热闹的人愿意走喧闹的大街,有的人喜欢走安静的小路,最终目标都是回家,但是有天大街封路,人流全部汇集到小路,超出小路的承载会造成小路道路拥挤交通瘫痪,平时半个小时的路程现在成了一个小时,那这时如果有个交警出现指挥交通疏解压力就能提早一点到家,所以出现极限的情况下能提高一点都是好的,会减少很多问题,所以在选择上人们更愿意选择能承受更高极限的以应对突发情况。相对来说,redis结构、队列、读取效率要高对数据库的压力小,同时用户体验会好些,不会出现因访问量太大导致处理慢卡顿,
1 回答4.2k 阅读✓ 已解决
2 回答2.3k 阅读✓ 已解决
2 回答3.3k 阅读
1 回答2k 阅读✓ 已解决
2 回答881 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答2.3k 阅读
有get你提问的问题是什么?
其实别说redis、mysql 甚至文件都可以做秒杀
问题 为什么 redis比mysql更适合
第一点 降低mysql的压力
web应用的架构 是由 n服务器 + mysql 组成的 机器可以无限横向扩容 mysql只有一台 所以任何的义务考虑都需要考虑mysql这一点 如果用redis做锁可以较少大部分无效请求落到数据库上
第二点 性能上
mysql的索引是b+树 大家应该都清楚 时间复杂度O(Log(n)) 那么 如果redis 用set、get、incr的方式 时间复杂度是 O(1) 从这一点 redis > mysql
第三点 实现上
mysql的开发需要建表 以后拓展啥的 还要alter table 啥的 大家都知道更新生产环境的表是多么痛苦 redis可能就舒服的要死了 具体不细说 自己可以品下 用redis的开发成本和mysql开发成本