服务器系统缓存问题总结

        做后端的同学都知道缓存,而且越是大的访问量的后端服务,缓存的作用越是重要。最近看了些大佬的解说,觉得说的很好,在此将我理解的记录下来,下面总结下后端缓存的一些知识点。顾名思义,缓存是如何出现的,从字面上的意思理解就是将本次请求的数据保存在内存里面,下次访问请求再来的时候,直接返回缓存的数据,不用再去访问DB(数据库)数据。这样做的好处是访问请求得到快速的响应,而且也可以大大缩小对数据库访问的压力;但是要完全实现这一点其实需要做很多很多的工作,如果你的业务量没有搞并发的访问量,那么这个缓存是没有必要的,可以直接去掉。

        接下来列举一下我们在做缓存的时候会遇到的一些常见问题

1、系统缓存常见问题

在这里只列举几个很常见的问题,在系统框架缓存设计的时候是需要特别考虑这些因素的:缓存穿透、缓存击穿、缓存雪崩、数据一致性和缓存监控。

2、缓存穿透

        什么叫缓存穿透呢,意思就是访问请求在缓存里面没有命中,而直接到了后端的DB进行请求,这样的请求就是缓存穿透,这样的请求一般情况是没什么的,因为,不存在,直接到达了后端DB数据库,到时候如果是黑客,那么可能就会被利用来进行恶意攻击,不停的穿透,对后台DB造成巨大访问压力,直到数据库崩溃,导致其他正常请求也无法正常访问。这种情况怎么解决呢,大佬给出方法也比较简单:

  • 缓存占位符
  • 短暂缓存,比如一分钟

上面的方法就是说在你设计缓存的时候,如果遇到穿透到DB也没有需要的数据的时候,在缓存里面记录一个占位符,并设置有效时间为一分钟,这样可以完全防止不法分子利用缓存穿透来恶意攻击数据库的访问请求。

3、缓存击穿

虽然大佬把它单独归为一类,其实从字面上来理解感觉和穿透差不多,但是其实也不一样。击穿这种情况是因为缓存数据时间过期,然后有大量的并发请求,如果这时每一处理好缓存,那么大量的同一访问请求就会大量击穿缓存,到达数据库进行访问,此时的数据库也是受不了这么大的访问的,数据库很容易直接down掉。解决这种情况的方法是:

  • 唯一DB请求,共享请求结果

解决方法的意思是,如果针对同一请求,在缓存数据过期的时候,在有一个访问请求来的时候需要生成一个唯一的请求ID,然后如果还有大量的请求,就等着结果,不需要再到数据库去请求,这样可以减小数据库压力,保证系统正常运行。当新的缓存返回,之前的同一请求都直接拿着这个最小的结果返回即可

4、缓存雪崩

缓存雪崩是什么意思呢?就是大量的缓存(如上万缓存)同时到达过期时间,这时大量的请求都会同时落到后端数据库,这样也会导致后端数据库的压力巨大。这种情况的解决办法是这样的:

  • 在缓存过期时间上加上一段时间(比如半小时)的随机时间偏差

上面的解决办法的意思就是在设置缓存时间有效期的时候加上随机时间偏差,避免大量缓存数据同时过期,导致大量访问请求同时落到后端数据的情况发生

5、缓存和数据库一致性

数据一致性是为了保证多个地方数据的一致,缓存有份数据,数据库里面也有一份数据,需要保持两个地方数据的一致性,那么什么情况区保证呢?其实就是在缓存数据过期,需要从新拉去数据的时候,那么此时,可能之前的什么请求修改了缓存,那么此时就需要更新到数据库里面去,这个时候就存在两种方法:

  • 先删缓存,再更新到数据库
  • 先更新数据库,再删缓存

那么我们选哪一种的,如果选择第一种,先删缓存,那么就会存在这种情况,你删了缓存,但是你还没更新完数据库,此时又有请求来,那么他就会去数据库拉数据,并更新缓存,但是此时数据库的数据还没更新,所以缓存里面就会存在不正确的数据,即为脏数据,所以这种方法是不行的

如果选第二种,先更新数据库,那么就不会存在这种情况,所以我们选择第二种:先更新数据库,再删缓存的方式

6、缓存监控

缓存监控是为了检验我们的缓存设计是不是有效,需要监控记录缓存的命中率,如果命中率太低,那么可以说我们的缓存做的是不行的,是失败的。比如说,我们缓存里面有1000条数据,如果统计出来热点数据只有10条,那么这个缓存需要优化,因为命中率太低了。监控还需要检验过期时间的设置是否合理,来进一步进行调优,所以缓存的设计是会根据测试或者业务上去后不断优化的过程,看到此处大概明白了缓存为什么如此麻烦了吧。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值