分布式缓存一般出现的问题(1)

分布式缓存

以下是缓存中经常遇到的问题

缓存雪崩:

  • 当大量请求访问同一个缓存时,对应得缓存失效,结果所有的请求都去访问数据库,对数据库CPU和内存造成巨大压力,可能导致宕机,从而形成的一系列连锁反应,造成系统崩溃损坏。
  • 一般处理方式有:设置缓存标记,记录缓存是否过期,过期的话就更新缓存。或者是给不同的缓存设置不同的过期时间

缓存穿透:

  • 当用户查询数据时,在缓存中没命中后,去数据库中查询,查到返回空或者查不到(就是数据不存在,相当于两次查询了没用的数据)这样请求就绕过缓存直接查数据库,这也是经常提的缓存命中率问题。
  • 一般解决方式有:常用的可以使用布隆过滤器,另外一种简单粗暴如果结果返回空的话就直接把空结构进行缓存,设置过期时间短一点大概不超过5分钟的样子,这样下次请求就会有值了就不会直接去访问数据库了

缓存击穿

  • 当大量请求数据时,缓存未命中(就是缓存中没有缓存此类的请求数据,但数据库中有),此时大量请求机会直接穿过缓存,请求到数据库中,从而大大增加数据库的压力。
  • 一般解决的办法就是,通过job(定时任务)去判断热点数据并及时更新到缓存中,或者时通过互斥锁的方式添加缓存数据
  • 击穿和穿透区别在于:击穿本身的数据是属于存在的只是不存在缓存中,而穿透本是就是不存在的数据

缓存预热

  • 就是系统上线后,将相关的数据缓存到缓存系统中,避免用户查询的时候先查数据库、再去查缓存的问题

缓存更新(淘汰策略)

  • 除了缓存服务器自带的缓存失效策略之外(Redis 默认的有 6 种策略可供选择),我们还可以根据具体的业务需求进行自定义缓存淘汰策略,常见的策略有两种:
    1、定时去清理过期的缓存;
    2、当有用户请求过来时,再判断这个请求所用到的缓存是否过期,过期的话就去底层系统得到新的数据并更新缓存。

缓存降级

  • 当访问量剧增时、服务器出现问题如:响应时间慢或长时间不响应,为了保证服务的高可用性,系统可根据一些关键数据进行自动降级、也可以通过人工降级的方式来保证服务的高可用,但是要注意该操作是会对服务造成一定损失的谨慎操作,有些服务是无法降级例如:购物车、结算操作。
  • 在缓存降级之前要梳理好,必须要保护的不可以降级和可降级的。降级的方式可以通过业务或者是日志等级来划分降级的级别,一般都是通过日志等级来划分,主要划分为:一般、警告、错误、严重错误,还可以根据不同的级别来设定不同的操作,比如这里的错误和严重错误的时候就可以通过人工降级的方式处理

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值