为啥如今php做秒杀都用redis,mysql的悲观锁不一样可以解决超卖问题吗 ?
回答
解决超卖只是秒杀的一小部分啊,重要的是,如果你不限流直接让秒杀的库存操作进入业务系统甚至数据库,你确定你的业务系统和数据库能撑住?而秒杀接入redis很靠前,不过是做令牌系统还是库存操作,都可以帮你拦截住大量的大量的无效或者无库存后的请求进入后段业务系统
有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开发成本
“解决超卖问题” 确实可以。
但是以牺牲高可用为代价。