Redis教程

redis缓存和数据库一致问题

本文主要是介绍redis缓存和数据库一致问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

缓存和数据库一致性

  • 双写模式:写数据库后,写缓存

    • 问题:并发时,2写进入,写完DB后都写缓存。有暂时的脏数据
      在这里插入图片描述
  • 失效模式:写完数据库后,删缓存
    在这里插入图片描述

  • 问题:还没存入数据库呢,线程2又读到旧的DB了

    • 解决:缓存设置过期时间,定期更新
    • 解决:写数据写时,加分布式的读写锁。

缓存数据一致性-解决方案:

  • 如果是用户纬度数据(订单数据、用户数据),这种并发几率非常小,不用考虑这个问题,缓存数据加上过期时间,每隔一段时间触发读的主动更新即可
  • 如果是菜单,商品介绍等基础数据,也可以去使用canal订阅binlog的方式
  • 缓存数据+过期时间也足够解决大部分业务对于缓存的要求。
  • 通过加锁保证并发读写,写写的时候按顺序排好队。读读无所谓。所以适合使用读写锁。(业务不关心脏数据,允许临时脏数据可忽略);

总结:

  • 我们能放入缓存的数据本就不应该是实时性、一致性要求超高的。所以缓存数据的时候加上过期时间,保证每天拿到当前最新数据即可。
  • 我们不应该过度设计,增加系统的复杂性
  • 遇到实时性、一致性要求高的数据,就应该查数据库,即使慢点。
    在这里插入图片描述
这篇关于redis缓存和数据库一致问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!