Redis三种常用的缓存读写策略

Cache Aside Pattern(旁路缓存模式)

现在基本都用这个模式

Cache Aside Pattern 中服务端需要同时维系 db 和 cache,并且是以 db 的结果为准。

读写步骤:

  • 先更新 db,然后直接删除 cache 。

 :

  • 从 cache 中读取数据,读取到就直接返回
  • cache 中读取不到的话,就从 db 中读取数据返回
  • 再把数据放到 cache 中。

写数据的过程中,可以先删除 cache ,后更新 db 么?

答:线程1先把缓存中的数据A删除,但更新数据库的时间较长。在此期间如果线程2读数据A,并写入缓存。随后线程1更新完数据库种的A后,导致缓存和数据库中的一致性出现问题。

在写数据的过程中,先更新 db,后删除 cache 就没有问题了么?

答:假设数据A不在缓存中,线程1要读取缓存,先查询数据库,此时线程2更新数据库中的数据A,在线程2更新完数据库之后线程1可能才开始把原数据A写入缓存中,造成数据不一致。

但因为写入缓存速度很快,所以出问题的可能性比较小。

Read/Write Through Pattern(读写穿透)

Read/Write Through Pattern 中服务端把 cache 视为主要数据存储,从中读取数据并将数据写入其中。cache 服务负责将此数据读取和写入 db,从而减轻了应用程序的职责。

 少见原因:Redis 并没有提供 cache 将数据写入 db 的功能。

  • 先查 cache,cache 中不存在,直接更新 db。
  • cache 中存在,则先更新 cache,然后 cache 服务自己更新 db(同步更新 cache 和 db)。

  • 从 cache 中读取数据,读取到就直接返回 。
  • 读取不到的话,先从 db 加载,写入到 cache 后返回响应。

Write Behind Pattern(异步缓存写入)

Write Behind Pattern 和 Read/Write Through Pattern 很相似,

两者都是由 cache 服务来负责 cache 和 db 的读写。

Read/Write Through 是同步更新 cache 和 db,

Write Behind 是只更新缓存,不直接更新 db,而是改为异步批量的方式来更新 db

相关推荐

  1. Redis--缓存常用 3 策略

    2024-07-18 16:20:02       35 阅读
  2. Redis常见删除策略

    2024-07-18 16:20:02       51 阅读
  3. Redis——缓存设计模式

    2024-07-18 16:20:02       25 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 16:20:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 16:20:02       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 16:20:02       58 阅读
  4. Python语言-面向对象

    2024-07-18 16:20:02       69 阅读

热门阅读

  1. Ubuntu22.04:安装Samba

    2024-07-18 16:20:02       22 阅读
  2. 使用 Vue 和 ECharts 打造动态数据可视化图表

    2024-07-18 16:20:02       25 阅读
  3. 排序思想-快排

    2024-07-18 16:20:02       25 阅读
  4. pytorch学习(一)argparse

    2024-07-18 16:20:02       24 阅读
  5. logback-spring.xml配置

    2024-07-18 16:20:02       18 阅读
  6. 嵌入式Linux应用开发基础-现有动态库so的使用

    2024-07-18 16:20:02       21 阅读
  7. Git常用命令详解

    2024-07-18 16:20:02       22 阅读
  8. git 指令速查

    2024-07-18 16:20:02       18 阅读
  9. IO多路复用技术、select、poll、epoll联系与区别

    2024-07-18 16:20:02       27 阅读
  10. C语言实现内存管理

    2024-07-18 16:20:02       17 阅读
  11. 行列视(RCV)支持哪些类型的数据源?

    2024-07-18 16:20:02       20 阅读
  12. C++——模板的奥秘

    2024-07-18 16:20:02       22 阅读
  13. WINUI——实现点在直线上随意移动

    2024-07-18 16:20:02       23 阅读