Redis缓存异常【三】

1. 缓存穿透

  当一个数据在数据库与缓存中都不存在,此时有大量的请求来访问该数据,会导致所有的请求都直接到达数据库,造成数据库系统崩溃。
  解决方案
  (1). 从数据库中未找到数据,就返回null,存储到缓存中,并对key设置较短的过期时间。
  (2). 布隆过滤器【推荐】
   它能非常快的判断出一个元素是否存在于海量数据的集合中。
   布隆过滤器的实现请查看该博客:点击

2. 缓存击穿

  大量的并发请求访问一个热点key,恰巧热点key过期了,后面的请求直接到达数据库,造成数据库系统崩溃。
  解决方案:
  (1). 加互斥锁
  (1). 热点key永不过期。
   永不过期有俩种含义:
   - 物理上永不过期:针对热点key不设置过期时间。
   - 逻辑上永不过期:将key的过期时间添加到value中,每次获取key都判断是否过期,若过期,就启动一个异步线程更新key的value值。

3. 缓存雪崩

  同一时间有大量的key过期,后面的请求都直接到达数据库,造成数据库系统短时间内承受了大量的请求而崩溃。它与击穿不同的是,击穿由于一个热点key过期导致的,雪崩由于一批key过期导致的。
  解决方案:
  (1). 加互斥锁
  (2). 热点key永不过期
  (3). key的过期时间均匀分配(预防同一时间有大量key过期)。
  (4). 加二级缓存(使用memacached作为二级缓存,需要考虑一级、二级缓存的数据同步问题)。

4. 缓存预热

  当系统上线时,提前将热点数据加入缓存,避免上线后有大量的请求过来,直接到达数据库,造成数据库崩溃。
  解决方案:
  (1). 数据量小时,写个页面,手动添加数据到缓存中。
  (2). 数据量大时,系统启动时,加载数据到缓存中。
  (2). 数据量非常大时,启动定时器添加数据到缓存中。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值