数据库和缓存一致性
AI-摘要
CaiCai GPT
AI初始化中...
介绍自己
生成本文简介
推荐相关文章
前往主页
前往tianli博客
本文最后更新于 2024-07-16,文章内容可能已经过时。
方式一 先操作缓存
延迟双删:保证数据一致性,更新数据时进来先删除一次redis缓存,执行更新数据库以后,延时后再删除一次,再次删除需要评估第二个线程过来查询再放入缓存需要的耗时
方式二 先操作数据库
先操作数据再操作缓存可以保证最终一致性,极端情况下删除失败进行删除重试操作,异步发送消息到消息队列mq中
总结
强一致性就导致性能损耗,若要强一致性,就需要保证缓存和数据库操作的原子性,加大了中间链路的压力
删除失败进行删除重试操作,不管方式一还是方式二都适用。
但是通过每次业务操作层面去进行操作耦合度太高,可以使用cannal进行解耦。
cannal作用是监听mysql binlog日志,检测到数据发生修改,可以发送一条消息到springboot应用中,然后执行对应的删除缓存操作。这样删除重试操作就得到了解耦。
当然这种解耦方式引入了新的中间件cannal,如果项目目前技术没有mq,还需要引入mq,这样引入了更多的中间件,如果其他地方没有使用,也会增大运维成本以及发生错误的机会,需要根据实际业务考虑是否需要解耦,以及是否需要保证强一致性,或允许一定时间内出现不一致的情况。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 caicaiBlog
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果