目前后端用的缓存,主流的有Redis,对于高并发的系统,实际上会遇到以下的几个问题:
(前提是一般的业务代码中,缓存空则去请求数据库)
1、缓存雪崩现象:由于访问了没有缓存,或者已经过期的KEY,导致大量请求到达数据库
2、缓存击穿:单个KEY的高并发访问,高负载导致命中丢失,大量并发查询到达数据库
so,如何设计
-
针对第一个问题,围绕着解决缓存为空的空窗期,有两种方案:
一、读写分离。业务代码只负责读,定时脚本负责写
二、设置两个过期时间,一个是业务逻辑上的过期时间,另一个是相对滞后的实际过期时间,在两个时间点之间,对缓存进行更新
-
针对第二个问题,把单KEY节点的负载访问,随机分散到几个缓存副本节点中。更新的时候,缓存副本全部同步更新。
以上。