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
相关推荐
zhaoyong2222 分钟前
CSS如何利用Less构建高度自定义组件_通过样式作用域防止冲突与溢出
jvm·数据库·python
2301_781571425 分钟前
Less如何优化CSS文件大小_利用压缩配置去除冗余样式
jvm·数据库·python
2401_867623986 分钟前
Next.js 13 中为嵌套客户端组件实现局部加载状态的正确方法
jvm·数据库·python
weixin_4440129321 分钟前
CSS Flex布局中如何实现导航栏与Logo的左右分布_利用justify-content- space-between
jvm·数据库·python
彳亍10123 分钟前
Less如何优化CSS文件大小_利用压缩配置去除冗余样式
jvm·数据库·python
m0_7485548127 分钟前
SQL如何防止JOIN查询导致数据库宕机_查询超时限制与资源管理
jvm·数据库·python
m0_7485548130 分钟前
React 中的渲染(Rendering)机制详解
jvm·数据库·python
SelectDB31 分钟前
时间序列近邻关联性能实测:Doris ASOF JOIN 领先 ClickHouse、DuckDB
大数据·数据库·数据分析
Mike117.33 分钟前
GBase 8c 逻辑复制槽停住以后,xlog 为什么越堆越多
数据库·oracle
2401_8800714033 分钟前
html怎么用jekyll转换_Jekyll博客如何导入传统HTML页面
jvm·数据库·python