学了这么多,相信大家对缓存更新的策略都已经有了清晰的认识。最后稍稍总结一下。
缓存更新的策略主要分为三种:
-
Cache aside
Cache aside
Cache aside
也就是旁路缓存
,是比较常用的缓存策略。
(1)读请求
常见流程
应用首先会判断缓存是否有该数据,缓存命中直接返回数据,缓存未命中即缓存穿透到数据库,从数据库查询数据然后回写到缓存中,最后返回数据给客户端。
(2)写请求
常见流程
-
Read/Write through
-
Read through
在 Cache Aside 更新模式中,应用代码需要维护两个数据源头:一个是缓存,一个是数据库。而在
Read-Through
策略下,应用程序无需管理缓存和数据库,只需要将数据库的同步委托给缓存提供程序Cache Provider
即可。所有数据交互都是通过抽象缓存层
完成的。 -
,应用程序只需要与
Cache Provider
交互,不用关心是从缓存取还是数据库。在进行大量读取时,
Read-Through
可以减少数据源上的负载,也对缓存服务的故障具备一定的弹性。如果缓存服务挂了,则缓存提供程序仍然可以通过直接转到数据源来进行操作。Read-Through 适用于多次请求相同数据的场景
,这与 Cache-Aside 策略非常相似,但是二者还是存在一些差别,这里再次强调一下: -
在 Cache-Aside 中,应用程序负责从数据源中获取数据并更新到缓存。
-
在 Read-Through 中,此逻辑通常是由独立的缓存提供程序(Cache Provider)支持。
-
Write behind
-
Write behind
Write behind
在一些地方也被称为Write back
, 简单理解就是:应用程序更新数据时只更新缓存,Cache Provider
每隔一段时间将数据刷新到数据库中。说白了就是延迟写入
。 -
应用程序更新两个数据,Cache Provider 会立即写入缓存中,但是隔一段时间才会批量写入数据库中。
这种方式有优点也有缺点:
-
优点
是数据写入速度非常快,适用于频繁写的场景。 -
缺点
是缓存和数据库不是强一致性,对一致性要求高的系统慎用。
Cache aside 通常会先更新数据库,然后再删除缓存,为了兜底通常还会将数据设置缓存时间。
Read/Write through 一般是由一个 Cache Provider 对外提供读写操作,应用程序不用感知操作的是缓存还是数据库。
Write behind简单理解就是延迟写入,Cache Provider 每隔一段时间会批量输入数据库,优点是应用程序写入速度非常快。