Redis缓存穿透、缓存雪崩、缓存缓存击穿

1.缓存穿透

概念

大量请求访问没有缓存的key,指查询一个一定不存在的数据,由于缓存不命中,请求会穿透到数据库,导致数据库压力过大。

原因及解决办法

1.恶意攻击

解决办法:

  • 对于少量请求的IP,限制其访问次数或者拉入黑名单;
  • 程序去检查key的合法性,对于不合法的key,做过滤处理;
  • 布隆过滤器

2.业务刚上线

解决办法:

  • 预热Redis;
  • 在最前端流量控制,逐步把请求释放出来;
  • 设置空值key

2.缓存雪崩

概念

指大量的key在同一时间失效,导致请求全部落到数据库上,压力过大,进而影响到上下文的应用服务。缓存雪崩的原因可能是缓存服务器宕机、缓存设置了相同的过期时间等。解决办法可以采用分布式锁、异步加载缓存等方式,避免大量的key同时失效。

原因及解决办法

1.Redis故障

Redis缓存服务器宕机。

解决办法:

  • 使用主从复制,提高可靠性;
  • 故障时,采取服务降级、熔断、限流等措施

2.大量的key设置了相同的过期时间

解决办法:

  • 将过期时间打散,加上随机值,尽量让缓存均匀过期;

3.缓存击穿

概念

指一个key非常热点,在不停的扛着大并发,当这个key在失效的瞬间,持续的大并发就穿破缓存直接请求数据库,导致数据库压力过大。缓存击穿的原因可能是热点数据没有被正确预热、缓存设置了较短的过期时间等。解决办法可以采用预加载、设置永久缓存等方式,避免热点数据失效。同时可以考虑使用互斥锁避免并发问题。

原因及解决办法

1.热点key设置了太短的过期时间

解决办法:

  • 热点key设置较长的过期时间,对于非常重要的key,可以设置永久有效,但是要从业务角度考虑维护数据一致性;
  • 使用分布式锁,如果key失效了,只保证一个请求访问数据库,然后更新key
相关推荐
NCIN EXPE3 小时前
redis 使用
数据库·redis·缓存
MongoDB 数据平台3 小时前
为编码代理引入 MongoDB 代理技能和插件
数据库·mongodb
极客on之路3 小时前
mysql explain type 各个字段解释
数据库·mysql
代码雕刻家4 小时前
MySQL与SQL Server的基本指令
数据库·mysql·sqlserver
lThE ANDE4 小时前
开启mysql的binlog日志
数据库·mysql
hERS EOUS4 小时前
nginx 代理 redis
运维·redis·nginx
yejqvow124 小时前
CSS如何控制placeholder文字的颜色_使用--placeholder伪元素
jvm·数据库·python
oLLI PILO4 小时前
nacos2.3.0 接入pgsql或其他数据库
数据库
m0_743623924 小时前
HTML怎么创建多语言切换器_HTML语言选择下拉结构【指南】
jvm·数据库·python