当前位置: 首页 > news >正文

cache更新策略

更新策略:

1.Cache Aside

  • get:从cache取数据,没有得到,则从数据库中取数据,成功后,放到缓存中(热点数据做同步处理)

Cache-Aside-Design-Pattern-Flow-Diagram

  •  update: 更新数据库,成功后,删除缓存

Updating-Data-using-the-Cache-Aside-Pattern-Flow-Diagram-1

2.同步+异步双保险更新

只有同步更新没有异步更新时,多线程进行更新会存在问题,db先A后B,缓存先B后A;

3.Read/Write Through 

  • Read Through

                  Read Through 套路就是在查询操作中更新缓存,也就是说,当缓存失效的时候(过期或LRU换出),Cache Aside是由调用方负责把数据加载入缓存,而Read Through则用缓存服务自己来加载,从而对应用方是透明的。

  • Write Through

                  Write Through 套路和Read Through相仿,不过是在更新数据时发生。当有数据更新的时候,如果没有命中缓存,直接更新数据库,然后返回。如果命中了缓存,则更新缓存,然后再由Cache自己更新数据库(这是一个同步操作)

           其中的Memory可以理解为就是我们例子里的数据库。

Write-through_with_no-write-allocation

4.Write Behind Caching

Write Behind Caching 更新模式就是在更新数据的时候,只更新缓存,不更新数据库,而我们的缓存会异步地批量更新数据库。这个设计的好处就是直接操作内存速度快。因为异步,Write Behind Caching 更新模式还可以合并对同一个数据的多次操作到数据库,所以性能的提高是相当可观的。

但其带来的问题是,数据不是强一致性的,而且可能会丢失。另外,Write Behind Caching 更新模式实现逻辑比较复杂,因为它需要确认有哪些数据是被更新了的,哪些数据需要刷到持久层上(dirty)。只有在缓存需要失效的时候,才会把它真正持久起来。

Write-back_with_write-allocation

参考资料:缓存更新的套路 | 酷 壳 - CoolShell

相关文章:

  • Redis Java 客户端 之 Jedis
  • BERT 模型是什么
  • SQL ​​主键(Primary Key)
  • 什么是具身智能?其发展五大趋势预测
  • 【C++游戏引擎开发】第12篇:GLSL语法与基础渲染——从管线结构到动态着色器
  • 循环神经网络 - 长短期记忆网络的门控机制
  • [原创](现代C++ Builder 12指南): 如何使用异常(try catch)?
  • 从 SaaS 到 MCP:构建 AI Agent 生态的标准化服务升级之路
  • 基于微信小程序的校园跑腿系统的设计与实现
  • MV-DLS600P激光振镜立体相机(MV-DLS600P)重要参数解析
  • Linux 守护进程浅析
  • RK3588 android12 适配 ilitek i2c接口TP
  • FlinkSQL的常用语言
  • C++20 统一容器擦除:std::erase 和 std::erase_if
  • 大厂算法面试 7 天冲刺:第7天-系统设计与模拟面试实战 —— 架构思维 + Java落地
  • Git 拉取时常见冲突及解决方法总结
  • MySQL---数据库基础
  • 封装公共方法,并存在异步请求接口情况 封装及调用
  • vue keep-alive 如何设置动态的页面缓存
  • Python | kelvin波的水平空间结构
  • 网站建设中模板下载/win10优化大师免费版
  • wordpress播放直播/seo整站优化外包公司
  • 政府网站建设排名/潍坊百度关键词优化
  • 中国建筑设计咨询公司/优化排名推广关键词
  • 简单企业网站/百度关键词指数排行
  • 做电影网站用什么软件叫什么名字吗/市场营销计划方案