Redis 之 缓存常见问题

Redis缓存穿透(数据查不到)

用户查询一个数据,缓存中没有,数据库中也没有。这样频繁的访问数据库导致数据库宕机。

解决方法:
1.请求加一个过滤器:
布隆过滤器: 对所有可能的查询的参数以hash形式存储,在控制层先进行校验,不符合则丢弃。这样避免数据库压力。

布隆过滤器

2.缓存空对象
查询为空则在缓存中保存一个空对象。

存在问题:
缓存需要更多空间来保存空对象
对空值设置了过期时间,还是会在缓存层和存储层之间的数据存在不一致

Redis缓存击穿(某个key访问量太大,缓存过期)

一个key访问量巨大,突然过期失效导致大量请求访问数据库。

解决方法:
1.热点数据永不过期
2.分布式锁(保证只有一个线程去查询后端服务,其他线程没有获取分布式锁的权限只能等待)

Redis缓存雪崩(缓存集中过期)

在某个时间段,缓存集中过期失效。(Redis宕机)

解决方法:
1.redis集群
2.限流降级(加锁或者队列来控制访问数据库线程数量)
3.数据预热(使用前将数据加载到redis)
4.做二级缓存,A1为原始缓存,A2为拷贝缓存,A1失效时,可以访问A2,A1缓存失效时间设置为短期,A2设置为长期
5.不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀。

发布了193 篇原创文章 · 获赞 13 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/u013919153/article/details/105616155