知识卡片

缓存热点——复制多份副本并错开过期时间

普通读书笔记卡 · 1667.b

内容

即使缓存整体性能很高,某条数据被极端集中访问(如明星发博被千万用户围观)时,单台承载该缓存的服务器仍会成瓶颈。解法是把热点数据复制成多份副本(key加编号区分),读取随机打到某份,把压力摊薄到多台服务器。关键是副本不能设同一过期时间,否则同时失效触发雪崩——正确做法是加随机偏移量错开失效时刻。发散:凡”大量对象同时失效”的设计,都值得引入随机性打散同步点。

参考来源

- 位置:《从0开始学架构》第21章《17|高性能缓存架构》"缓存热点"一节(源文件:_epub-src/OEBPS/Text/part0020_split_005.html) - 结论依据:原文以明星微博为例"对于粉丝数超过100万的明星,每条微博都可以生成100份缓存……通过在缓存的key里面加上编号进行区分,每次读缓存时都随机读取其中某份缓存",并明确"不同的缓存副本不要设置统一的过期时间,否则就会出现所有缓存副本同时生成同时失效的情况……正确的做法是……不同的缓存副本的过期时间是指定范围内的随机值"。 - 原始内容:对于粉丝数超过100万的明星,每条微博都可以生成100份缓存,缓存的数据是一样的,通过在缓存的key里面加上编号进行区分,每次读缓存时都随机读取其中某份缓存……不同的缓存副本不要设置统一的过期时间,否则就会出现所有缓存副本同时生成同时失效的情况,从而引发缓存雪崩效应。