🤔听说你用过Redis、Caffeine,那我问你你了解Cache Design Pattern吗?Look at my eyes。
今天就来聊聊Cache Design Pattern。Cache Design Pattern是缓存设计模式,是用于优化系统性能、减少资源消耗和提升响应速度的软件架构策略。主要有六大核心缓存模式。
Cache-Aside
又名旁路缓存,博主我捏最喜欢的一个模式,也是用得最多的一个模式。
原理
核心思想:应用层直接管理缓存,未命中的从数据库加载并写入缓存。
适应场景:读多写少,而且可以搭配布隆过滤器(神器)
Read-Through
又叫读穿透
原理
核心思想:缓存层自动护理数据加载,应用层只与缓存交互。
// 配置缓存加载器(CacheLoader)
LoadingCache<String, User> userCache = CacheBuilder.newBuilder().maximumSize(1000).expireAfterWrite(10, TimeUnit.MINUTES).build(new CacheLoader<String, User>() {public User load(String userId) {return db.loadUser(userId); // 自动加载未命中数据}});
适用场景:缓存作为数据访问的唯一抽象层
Write-Thrugh
又叫写穿透
原理
核心原理:数据写入同步更新缓存层和持久层,确保强一致性。
适用场景:对数据一致性要求高的场景。
缺点:写入延迟高
Write-Behind
又称为写回
原理
核心原理:数据先写入缓存,然后异步更新持久层。(一般搭配消息队列使用)
使用场景:高吞吐量写入场景(当然有数据丢失的可能性,所以一盘搭配MQ使用)
Refresh-Ahead
又叫预刷新机制。
原理
在缓存过期前主动刷新缓存,避免缓存过期后的请求风暴。
// Caffeine缓存配置示例
LoadingCache<String, Data> cache = Caffeine.newBuilder().expireAfterWrite(5, TimeUnit.MINUTES).refreshAfterWrite(4, TimeUnit.MINUTES) // 提前1分钟刷新.build(key -> loadDataFromSource(key));
适应场景:数据变化频繁但允许短暂不一致(新闻热点)
Cache-AS-SOR
又叫缓存即数据源。
原理
核心思想:以缓存作为唯一数据源,持久层只做备份。
适应场景:做热点排行榜