Redis - 读写模式 - 缓存一致性
2024-10-20 19:21:37
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。
最新文章
- 20145205 《Java程序设计》实验报告五:Java网络编程及安全
- Java Web include指令和动作的区别
- SMON功能(一):清理临时段
- 【iCore、iCore2、iBoard例程】【异步FIFO跨时钟域通信(通过ARM 读FPGA FIFO)】
- Android编程: 调试方法
- 搭建sql注入实验环境(基于windows)
- meta里面的viewport属性
- 系统管理中 bash shell 脚本常用方法总结
- 如何给sublime text3安装汉化包?so easy 哦
- 爬取西刺网代理ip,并把其存放mysql数据库
- Struts(二十三):使用声名式验证
- json格式处理及扩展
- springboot+maven整合spring security
- python模块安装查看、包制作
- RS485 VS 20mA 电流环
- [leetcode]115. Distinct Subsequences 计算不同子序列个数
- Topcoder SRM 643 Div1 250<;peter_pan>;
- 设置spacevim字体显示乱码问题
- python入门22 pymssql模块(python连接sql server查询)
- python--enum