缓存读写策略

  • Cache Aside Pattern(旁路缓存模式)
  • 概述
  • 流程
  • 缺点
  • Read/Write Through Pattern(读写穿透)
  • 概述
  • 与缓存旁路策略的不同
  • 流程
  • 缺点
  • Write Behind Pattern(异步缓存写入)
  • 概述


Cache Aside Pattern(旁路缓存模式)

概述

这是我们平时使用比较多的一个缓存读写模式,适合读请求比较多的场景。

流程

:先更新数据库,然后删除缓存的数据

:先从cache中读取数据,存在的话直接返回。 不存在的话,从数据库读取数据,再将数据更新到缓存中

redis缓存驱逐算法 redis缓存策略_数据库

缺点

  • 首次请求数据一定不在 cache 的问题
  • 解决办法:可以将热点数据可以提前放入cache 中
  • 写操作比较频繁的话导致cache中的数据会被频繁被删除,这样会影响缓存命中率
  • 解决办法:可以在更新DB的时候同样更新cache

Read/Write Through Pattern(读写穿透)

概述

该策略中,服务端把 cache 视为主要数据存储,从中读取数据并将数据写入其中。cache 服务负责将此数据读取和写入 DB,从而减轻了应用程序的职责。

与缓存旁路策略的不同

缓存旁路模式 下,发生读请求的时候,如果 cache 中不存在对应的数据,是由客户端自己负责把数据写入 cache,
读写穿透模式 则是 cache 服务自己来写入缓存的,这对客户端是透明的。

流程

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

redis缓存驱逐算法 redis缓存策略_数据_02

缺点

  • 首次请求数据一定不在 cache 的问题
  • 解决办法:可以将热点数据可以提前放入cache 中

Write Behind Pattern(异步缓存写入)

概述

该策略,是同步更新 cache 和 数据库,而 Write Behind Caching 则是只更新缓存,不直接更新 数据库,而是改为异步批量的方式来更新 数据库。这种方式对数据一致性带来了更大的挑战,比如cache数据可能还没异步更新DB的话,cache服务可能就就挂掉了。

这种策略在我们平时开发过程中也非常非常少见,但是不代表它的应用场景少,比如消息队列中消息的异步写入磁盘、MySQL 的 InnoDB Buffer Pool 机制都用到了这种策略Write Behind Pattern 下 数据库的写性能非常高,非常适合一些数据经常变化又对数据一致性要求没那么高的场景,比如浏览量、点赞量。

redis缓存驱逐算法 redis缓存策略_数据_03