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,此时出现缓存一致性失效。

解决办法:延时双删

  1. 删除cache中的数据
  2. 更新database数据
  3. 延时500ms(延时时间要大于更新数据库时间)
  4. 删除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。

最新文章

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

热门文章

  1. Exchange统计邮箱数量
  2. 2020西湖论剑一道web题[网盘]
  3. 7-19(排序) 寻找大富翁 (25 分)(归并排序)(C语言实现)
  4. Metalama简介1. 不止是一个.NET跨平台的编译时AOP框架
  5. 一篇文章带你搞懂InnoDB的索引|结合样例
  6. POJ - 1321 A - 棋盘问题
  7. Promise了解
  8. 计算机系统5-> 计组与体系结构2 | MIPS指令集(上)| 指令系统
  9. Dom基础(二):Dom性能优化
  10. javascript中的宏任务和微任务(一)