缓存设计模式

缓存:广义上的缓存,不仅仅指 Redis 这些常用作缓存的工具
命中缓存:指查询操作中直接在缓存中得到结果
数据更新:指同步缓存与数据库中的数据

一.Cache-Aside (旁路缓存)
Cache-Aside Pattern,也称为Lazy-Loading Pattern,业务层负责直接从缓存中读取和写入数据。如果缓存未命中,业务侧从数据库加载数据,同时将数据更新到缓存中。
在这里插入图片描述
优点:

  1. 减少数据库访问,提高了业务处理效率
  2. 目前spring 3.1开始已支持 Cache ,开发简单

缺点:

  1. 存在数据一致性问题。
  2. 存在同一时间大量请求相同数据导致的穿透问题。

二.Read-Through (透读缓存)

Read-Through Pattern是由缓存层负责从数据源(如数据库)加载数据。当业务层请求数据时,如果缓存中存在该数据,则直接返回;如果不存在,则缓存层负责从数据源加载数据,存入缓存,并返回给业务层。
在这里插入图片描述
优点:

  1. 减少数据库访问,提高了业务处理效率

缺点:

  1. 存在数据一致性问题。
  2. 存在同一时间大量请求相同数据导致的穿透问题。

三.Write-Through (透写缓存)
Write-Through Pattern是由应用程序在更新数据时同时更新缓存和后端数据源(如数据库)。
在这里插入图片描述
优点

  1. 减少数据库访问,提高了业务处理效率
  2. 在业务实现策略前提下,可以保证数据一致性

缺点

  1. 在缓存业务出现异常或数据库保存业务出现异常,可能出现数据一致性问题
  2. 当缓存业务异常不会从数据库自动加载,可能出现数据库存在但未查到数据的情况。

四.Write-Back / Write-Behind (写后缓存)
Write-Back / Write-Behind Pattern是由业务层首先将数据写入缓存,然后再异步地更新后端数据源(如数据库)。
在这里插入图片描述

优点

  1. 减少数据库访问,提高了业务处理效率
  2. 在业务实现策略前提下,可以保证数据一致性
  3. 可以批量异步更新数据库
  4. 同比与Write-Through (透写缓存),业务处理时间更短

缺点

  1. 在缓存业务出现异常或数据库保存业务出现异常,可能出现数据一致性问题。
  2. 当缓存业务异常不会从数据库自动加载,可能出现数据库存在但未查到数据的情况。
  3. 可能在缓存和数据库更新之间存在较大一段时间间隔,会导致数据一致性问题。

五.Write-Through-Back (透写后缓存)
Write-Through-Back Pattern是结合了Write-Through(透写缓存)和Write-Back / Write-Behind (写后缓存)模式的缓存方法。数据先被写入缓存,再异步地更新到数据库。这种模式旨在平衡写操作的即时性和减少对数据源的直接压力。注:Write-Back通常再写入缓存与数据库存在较大一段时间间隔,Write-Through-Back通常立即执行异步操作,能较大程度减少最终一致性时长
在这里插入图片描述
优点

  1. 减少数据库访问,提高了业务处理效率
  2. 在业务实现策略前提下,可以保证数据一致性

缺点

  1. 在缓存业务出现异常或数据库保存业务出现异常,可能出现数据一致性问题。
  2. 当缓存业务异常不会从数据库自动加载,可能出现数据库存在但未查到数据的情况。
  3. 批量更新数据可能在缓存和数据库更新之间存在一段时间间隔,相比于Write-Back / Write-Behind (写后缓存),间隔时间要小。

六.Refresh-Ahead (预刷新缓存)
Refresh-Ahead Pattern用于主动刷新即将过期的缓存项。系统会监控缓存数据的过期情况,当缓存数据接近过期时自动从数据源刷新数据。这有助于保持缓存数据的新鲜度,减少缓存未命中的情况,通常也可用于定时刷新不常用的数据减少RPC远程调用的开销
在这里插入图片描述
优点

  1. 减少数据库访问,提高了业务处理效率。
  2. 保持缓存数据的热度,减少缓存未命中的情况,减少热点数据穿透的可能性。

缺点

  1. 定期刷新缓存可能会消耗额外的系统资源
  2. 需要有效的策略决定缓存刷新,消耗更多的开发资源.

七.Lazy-Loading (懒加载)
Lazy-Loading Pattern模式下,数据仅在首次请求时被加载到缓存中,这种设计模式是一种设计指导理念,而不是实现方式。当业务侧请求数据时,如果数据不在缓存中,则从数据源加载数据并将其存储在缓存中。注:Cache-Aside Pattern/Lazy-Loading Pattern(旁路缓存),是Lazy-Loading (懒加载)的一种实现方式。
八.Write-Around (绕写缓存)
Write-Around Pattern数据在更新时先写入数据源(如数据库),再写入缓存。这种设计模式同样是一种设计指导理念,而不是实现方式。

  • 14
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值