缓存三兄弟
“缓存三兄弟”,即 Redis 缓存穿透、缓存击穿、缓存雪崩。这是在后端开发中与缓存相关的三个经典问题,以下是它们的详细解释:
-
缓存穿透:
缓存穿透是指用户请求的数据既不在缓存中,也不存在于数据库中。由于缓存无法命中,所有请求都会直接落到数据库上,可能导致数据库压力过大甚至崩溃。常见的解决方法包括:- 使用 布隆过滤器 拦截非法请求。
- 对查询结果为空的请求也进行缓存(例如缓存一个空值),并设置较短的过期时间。
-
缓存击穿:
缓存击穿是指某些热点数据在缓存中失效后,短时间内有大量请求同时访问该数据,导致这些请求直接打到数据库,造成瞬时压力激增。解决方案包括:- 设置热点数据永不过期。
- 使用 互斥锁 或 单线程更新缓存,确保只有一个请求能更新缓存,其余请求等待缓存更新完成。
-
缓存雪崩:
缓存雪崩是指大量缓存数据在同一时间失效,导致大量请求直接涌向数据库,可能引发系统崩溃。为避免缓存雪崩,可以采取以下措施:- 为缓存设置随机过期时间,避免大量缓存同时失效。
- 在缓存失效时,使用 降级策略,如返回默认值或限流保护数据库。