redis学习(三)缓存雪崩与缓存穿透

缓存雪崩

缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉。

可能的情况有以下两种:

1、全部数据设置的缓存时间同时到期,导致所有请求全部打在关系型数据库上,造成请求雪崩,很有可能把数据库压崩导致服务宕机

2、redis服务因为某些原因宕机,导致所有请求全部打在关系型数据库上

解决方案:

事前:尽量保证整个 redis 集群的高可用性,设置好主从分布+哨兵监听,发现机器宕机尽快补上。选择合适的内存淘汰策略。

事中:本地ehcache缓存 + hystrix限流&降级,避免MySQL崩掉

事后:利用 redis 持久化机制保存的数据尽快恢复缓存

缓存击穿

缓存击穿通常是故意的,属于黑客攻击的一种手段,抛出大量不存在的key,跳过redis直接打在关系型数据库上,达到让数据库崩溃的目的

解决方案:

1、缓存无效 key : 如果缓存和数据库都查不到某个 key 的数据就写一个到 redis 中去并设置过期时间,这种方式只可以解决请求的 key 变化不频繁的情况,并且不能根本性的解决问题

2、通过布隆过滤器,过滤掉非法的key,保护数据库

发布了41 篇原创文章 · 获赞 75 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44407699/article/details/104766012