>  Q&A  >  본문

redis与mysql一致性问题

应用在电商购物库存场景
1、用户下单后 redis对库存id做增加(件数)
2、用户付款成功后 redis对库存id做减少(件数),同时减少mysql里的库存

问题是:
流程中出现问题,mysql可以做数据回滚,但redis不可以
除了记录日志分析外,有较好办法可以解决这个问题么

巴扎黑巴扎黑2743일 전678

모든 응답(4)나는 대답할 것이다

  • 怪我咯

    怪我咯2017-04-17 14:50:45

    你指得MySQL回滚是事务的回滚吗?

    既然流程出问题了,那代码应该能捕获到出问题了,手动回滚redis即可。
    或者等流程事务成立提交后,再修改redis。

    회신하다
    0
  • 迷茫

    迷茫2017-04-17 14:50:45

    还是事物问题。
    不要把mysql操作当做一件事,redis操作当做另一件事。
    要把数据增删改当做一件事。不论是mysql还是redis,只要有一个添加删除出错了,就回滚事务。redis请使用pipeline。

    회신하다
    0
  • 迷茫

    迷茫2017-04-17 14:50:45

    换个思路吧,从产品角度你就应该允许redis的数据是不同步的,就算redis可以持久化,在内存还没有刷到硬盘之前服务器挂了就有丢数据的可能性,你只要保证下单的时候SKU库存是从Mysql检测的即可,就算他绕过了redis,也能保证最终结果是正确的

    회신하다
    0
  • PHPz

    PHPz2017-04-17 14:50:45

    mysql做底层逻辑保证,redis建议只做缓存,redis数据定期或者不存在的时候 去和mysql同步。

    회신하다
    0
  • 취소회신하다