为啥如今php做秒杀都用redis,mysql的悲观锁不一样可以解决超卖问题吗 ?

为啥如今php做秒杀都用redis,mysql的悲观锁不一样可以解决超卖问题吗 ?

阅读 588
评论
    6 个回答

    有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开发成本

      • 1.8k

      解决超卖只是秒杀的一小部分啊,重要的是,如果你不限流直接让秒杀的库存操作进入业务系统甚至数据库,你确定你的业务系统和数据库能撑住?而秒杀接入redis很靠前,不过是做令牌系统还是库存操作,都可以帮你拦截住大量的大量的无效或者无库存后的请求进入后段业务系统

        “解决超卖问题” 确实可以。

        但是以牺牲高可用为代价。

          秒杀属于高并发的一种业务场景。如果直接走库,同一时刻,成千上万的请求,对数据的压力是很大的。

            mysql的读取写入,大部分是对文件磁盘IO的操作,而redis是对内存的操作,高并发场景下,使用redis性能更高

            所以,高并发场景下,用redis
            没有高并发场景下,两种方式都行

              都可以实现,但主要看需求,就像回家的路有大路和小路之分,喜欢热闹的人愿意走喧闹的大街,有的人喜欢走安静的小路,最终目标都是回家,但是有天大街封路,人流全部汇集到小路,超出小路的承载会造成小路道路拥挤交通瘫痪,平时半个小时的路程现在成了一个小时,那这时如果有个交警出现指挥交通疏解压力就能提早一点到家,所以出现极限的情况下能提高一点都是好的,会减少很多问题,所以在选择上人们更愿意选择能承受更高极限的以应对突发情况。相对来说,redis结构、队列、读取效率要高对数据库的压力小,同时用户体验会好些,不会出现因访问量太大导致处理慢卡顿,

                撰写回答

                登录后参与交流、获取后续更新提醒