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

Redis 缓存穿透

缓存穿透是指针对Redis中没有,数据库中也没有的数据进行查询,这类查询会直接到达数据库, 当有大量这类请求时,有可能搞垮数据库,导致服务瘫痪。

解决方法一: 请求穿透Redis时,无论数据库查出什么结果,都会写到Redis里,如果是不存在数据,只需要设置一个较短的过期时间。这样针对同一个参数,就能够直接被Redis拦截。但在短时间内如果有大量的不同参数的穿透请求的话,会导致Redis占用内存快速上升。

解决方法二: 使用查询数据库之前,使用布隆过滤器检验参数是否有效,这是非常好的一种方式。

Redis 缓存击穿

缓存击穿是指Redis中没有,数据库中有的数据进行查询,而且这个key是一个热点的key,当这个热点key突然失效的时,会导致大量的查询请求打到数据库上。如果redis一开始就没有这个key,但突然有大量请求来访问这个key的话,也算时缓存击穿。

解决方法一: 让改热点key的缓存永远不过期,但解决不了冷门key突然被大量访问

解决方法二: 加载数据时使用互斥锁,可以通化Redis的Set NX 实现

Redis 缓存雪崩

缓存雪崩指的是大量缓存集中失效,导致请求全部打在数据库上。Redis服务器突然挂掉了也会导致大量key失效。如果突然出现大量请求访问不同的key,这些key不存在于Redis,但存在于数据库中时,也会导致缓存雪崩

解决方式一: 针对缓存集中大量失效的情况,缓存失效时间可以在一定时间范围内随机,避免集中过期

解决方式二: 针对Redis服务器突然挂掉导致的情况,可以依赖Redis的高可用方案,如Redis Sentinel 和 Redis Cluster

解决方式三: 针对大量不存在Redis中key的请求,可以使用缓存预热的方式或者是对数据库请求使用互斥锁进行控制,避免大量请求打到数据库中

Redis缓存预热

Redis启动时,不存储任何缓存,如果直接对外服务,可能会出现大量请求直接打到数据库的情况,容易导致数据库崩溃,这时候就需要提前加载数据到Redis中。但很明显,数据库中的数据量很大的时候,是不可能全部加载到Redis中的,所以需要能够对请求进行统计,根据统计数据分析哪些是热点key,在下次启动Redis时提前加载到内存中。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值