缓存的设计模式

 

 

 

  • Cache Aside(旁路缓存)  一致性要求
  • Read / Write Through(读写穿透)  系统隔离
  • Write Behind Caching(异步缓存写入)  数据大量写 点赞计数需求

 

ref

https://blog.csdn.net/hualaoshuan/article/details/102638188

 

 


 

具体策略

策略描述

优点

缺点

更新策略

(缓存更新时机不同。影响数据准确性)

实时更新

源数据新增或更新后,立即更新缓存

1、数据实时性高

2、数据一致性高

1、若数据更新机制和触发时机很多且复杂,缓存数据一致性维护成本高。有遗漏数据更新场景导致数据不一致的风险

2、缓存不能设置过期时间,冷访问数据占用内存

3、新增缓存需要刷历史数据

延迟更新

轮询主动更新

每间隔一段时间查询最新数据,并更新缓存

1、缓存数据维护简单统一

2、新增缓存无需刷历史数据

1、短时间内数据不准确(轮询时间间隔)

2、需考虑轮询时间如何设置

3、需考虑每次轮询哪些数据

4、不区分冷热数据,冷访问数据会占用内存

读请求触发同步更新

读未命中(包括缓存过期),则查询源数据,更新缓存,并返回结果。

1、缓存数据维护简单统一

2、新增缓存无需刷历史数据

3、冷访问数据会自动过期,减少内存占用

4、开发简单

1、短时间内数据不准确(必须设置过期时间)

2、需考虑过期时间如何设置

3、要考虑源数据为空时,回种空值问题,否则会出现缓存穿透。若回种空值则可能占用大量内存

 

读请求触发异步更新

读未命中(包括缓存过期),则发布异步事件,更新缓存。

读取策略(影响接口性能)

 

只读缓存(cache-only)

依赖缓存数据,缓存未命中则返回空。

1、响应时间更快

1、数据准确性由选择的更新策略决定。不与【读请求触发同步更新】策略结合使用

2、需要保证缓存组件高可用

读穿(read-through)

读未命中,则查询源数据,更新缓存,并返回结果。

1、rpc调用兜底,不会出现有数据却不展示的情况

1、数据准确性由选择的更新策略决定。不与【读请求触发异步更新】策略结合使用

2、若未命中,响应时间慢

 

-- 

 

缓存更新的套路

https://coolshell.cn/articles/17416.html

 

--

 

cache aside

可能的问题

 

posted @ 2020-02-24 16:17  人在江湖之诗和远方  阅读(546)  评论(0编辑  收藏  举报