Redis - 读写模式 - 缓存一致性
Cache Aside Pattern(旁路缓存模式)
读:从cache中读取数据,若读取到则直接返回;cache中不存在则去database中读取,然后更新到cache。
写:先更新database然后删除cache中的数据。
缓存一致性
多并发情况下,需要延时双删,否则数据会不一致。
出现不一致的情况
1. 事务一往database更新数据 2. 事务二往database更新数据 3. 事务二完成database更新,删除cache中数据 4. 此时接口被访问,更新database数据到cache(此时还在读取未更新到cache) 5. 事务一完成database更新,删除cache中缓存 5. 接口被访问的数据更新到cache 结果:导致cache中的数据是database事务二更新完的数据,事务一的数据尚未更新到cache,此时出现缓存一致性失效。
解决办法:延时双删
- 删除cache中的数据
- 更新database数据
- 延时500ms(延时时间要大于更新数据库时间)
- 删除cache中的数据
此时保证读到的数据必定是最新的。
Read/Write Through Pattern(读写穿透)
读:从cache中读取数据,若读取到则直接返回;cache中不存在则去database中读取,然后更新到cache。
写:先更新cache中的数据,若cache中不存在,则更新database,更新database时同步更新cache。
Write Behind Pattern(异步缓存写入)
读:从cache中读取数据,若读取到则直接返回;cache中不存在则去database中读取,然后更新到cache。
写:先更新cache中的数据,若cache中不存在,则更新database,更新database时异步更新cache。
本文作者:护发师兄
本文链接:https://www.cnblogs.com/jonil/p/16335717.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步