微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

redis缓存和数据库一致问题

缓存和数据库一致性

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

    • 问题:并发时,2写进入,写完DB后都写缓存。有暂时的脏数据

      在这里插入图片描述

  • 失效模式:写完数据库后,删缓存

    在这里插入图片描述

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

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

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

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

总结:

  • 我们能放入缓存的数据本就不应该是实时性、一致性要求超高的。所以缓存数据的时候加上过期时间,保证每天拿到当前最新数据即可。
  • 我们不应该过度设计,增加系统的复杂性
  • 遇到实时性、一致性要求高的数据,就应该查数据库,即使慢点。

    在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐