Redis的缓存穿透、击穿、雪崩及解决方案

Redis的缓存穿透、击穿、雪崩是三个不同的缓存机制问题,在设计和使用Redis缓存系统时,我们需要考虑以下三种常见的问题:缓存穿透、缓存击穿和缓存雪崩。

缓存穿透(Cache Penetration)

定义:

缓存穿透:缓存穿透是指查询一个在缓存和数据库中都不存在的数据,用户不断发起这样的请求,由于缓存不会缓存这样的查询结果,每次请求都会去数据库查询,可能会导致数据库压力过大。缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会直接打到数据库。

影响:

  • 数据库压力增大,性能下降。
  • 可能导致系统崩溃。

解决方案:

  1. key校验+缓存空对象:
    首先在接口层面判断key是否有效(如id<=0或者校验key的长度等),这样会在接口层面拦掉一部分不合规则的请求。如果校验通过后,去查询数据库,当发现数据在数据库中不存在时,也将其存入Redis中,但value为空。
    • 优点:实现简单,维护方便。
    • 缺点:额外的内存消耗,可能造成短期的不一致。
  2. 布隆过滤器:
    使用布隆过滤器判断请求的数据是否可能存在于Redis中。
    • 优点:内存占用较少,没有多余key。
    • 缺点:实现复杂,存在误判可能。

缓存击穿

定义:

缓存击穿是指缓存中某个热点数据失效,此时有大量并发请求同时访问这个失效的数据,导致这些请求直接访问数据库,造成数据库压力过大,甚至导致数据库崩溃。

影响:

数据库承受高并发压力,可能导致崩溃。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值