关于java:分布式缓存

缓存雪崩
缓存雪崩咱们能够简略的了解为:因为原有缓存生效,新缓存未到期间所有本来应该拜访缓存的申请都去查询数据库了,而对数据库 CPU 和内存造成微小压力,重大的会造成数据库宕机。从而造成一系列连锁反应,造成整个零碎解体。个别有三种解决方法:

个别并发量不是特地多的时候,应用最多的解决方案是加锁排队。
给每一个缓存数据减少相应的缓存标记,记录缓存的是否生效,如果缓存标记生效,则更新数据缓存。
为 key 设置不同的缓存生效工夫。
缓存穿透
缓存穿透是指用户查问数据,在数据库没有,天然在缓存中也不会有。这样就导致用户查问的时候,在缓存中找不到,每次都要去数据库再查问一遍,而后返回空(相当于进行了两次无用的查问)。这样申请就绕过缓存间接查数据库,这也是常常提的缓存命中率问题。
有很多种办法能够无效地解决缓存穿透问题,最常见的则是采纳布隆过滤器,将所有可能存在的数据哈希到一个足够大的 bitmap 中,一个肯定不存在的数据会被这个 bitmap 拦挡掉,从而防止了对底层存储系统的查问压力。另外也有一个更为简略粗犷的办法,如果一个查问返回的数据为空(不论是数据不存在,还是系统故障),咱们依然把这个空后果进行缓存,但它的过期工夫会很短,最长不超过五分钟。通过这个间接设置的默认值寄存到缓存,这样第二次到缓冲中获取就有值了,而不会持续拜访数据库。

缓存预热
缓存预热就是零碎上线后,将相干的缓存数据间接加载到缓存零碎。这样就能够防止在用户申请的时候,先查询数据库,而后再将数据缓存的问题!用户间接查问当时被预热的缓存数据!

缓存更新
缓存更新除了缓存服务器自带的缓存生效策略之外(Redis 默认的有 6 中策略可供选择),咱们还能够依据具体的业务需要进行自定义的缓存淘汰,常见的策略有两种:

(1)定时去清理过期的缓存;
(2)当有用户申请过去时,再判断这个申请所用到的缓存是否过期,过期的话就去底层零碎失去新数据并更新缓存。

缓存降级
当访问量剧增、服务呈现问题(如响应工夫慢或不响应)或非核心服务影响到外围流程的性能时,依然须要保障服务还是可用的,即便是有损服务。零碎能够依据一些要害数据进行主动降级,也能够配置开关实现人工降级。降级的最终目标是保障外围服务可用,即便是有损的。而且有些服务是无奈降级的(如退出购物车、结算)。

本文由博客群发一文多发等经营工具平台 OpenWrite 公布

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据