Redis缓存穿透与雪崩

缓存穿透

  • 概念
    缓存穿透的概念其实很简单,就是用户想要查询一个数据,当缓存里面没有这个数据的时候,就会去数据库中查询,如果数据库也没有就查询失败。在高并发的情况下,大量请求到缓存中查询,没有查到数据,就会去数据库中查询,导致服务器压力非常大,这就相当于出现了缓存穿透。
  • 解决方案
    1、布隆过滤器
    布隆过滤器是是一种数据结构,将所有可能查询的key放入布隆过滤器中,在用户请求到达缓存之前,用户请求查询的key在布隆滤器中进行筛选,如果不存在则直接丢弃。
    2、缓存空对象
    用户请求查询的数据在缓存以及数据库中都不存在时,在缓存中加入用户请求的key,设置值为空,这样下次请求这个key时就会直接返回空,不会查询数据库。但是如果设置空对象过多,会导致很多资源浪费,可以设定缓存的过期时间。

缓存击穿

  • 概念
    缓存击穿就是在缓存失效的瞬间,很多请求同时到达,这时缓存以及失效,所有请求会直接访问数据库,导致服务器压力变大。
  • 解决方案
    1、设置热点数据缓存永不过期(占用内存资源)
    2、加互斥锁(在访问数据库时加锁!在缓存失效的时候,请求访问数据库,由于加锁的原因,只有一个线程能够访问数据库,缓解数据库压力)

缓存雪崩

  • 概念
    缓存雪崩就是指缓存由于某种原因不能正常工作了,所有请求直接访问数据库,数据库顶不住压力可能会出现服务崩掉的情况。
  • 解决方案
    1、Redis高可用!在搭建Redis集群的时候可以将服务器安装在不同地方,这样某一个机子宕机,集群中其他服务器可以正常使用。
    2、限流降级!使用互斥锁保证在访问存储层只有一个线程访问数据库,控制数据库访问数量。
    3、数据预热!在部署之前,可以先将数据访问一遍,数据会放入缓存中。对于可能大量查询的数据,在缓存中的过期时间尽量设置的均匀一点,尽量不要访问量大的缓存同时失效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值