
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
缓存技术的应用在许多软件编程开发项目中都是会经常见到的一个功能,而本文我们就通过案例分析来简单了解一下,缓存技术应用问题都有哪些常见类型。
1、缓存雪崩
避免缓存的集中失效
为了限制缓存的数量,很多的缓存记录都会设置一定的有效期,到期后自动失效。这种在一些批量缓存构建或者全量缓存重建时,因为设置了相同的失效时间,会导致大量甚至全部的缓存数据在短时间内集体失效,这样会导致大量的请求无法命中缓存而直接流转到了下游模块,导致系统瘫痪,也即缓存雪崩。
其实解决的思路也很简单,避免出现集中失效就好咯。如何避免呢?
一种简单的策略,就是批量加载的场景,将过期时间在一个固定时间段内以毫秒级别进行随机打散,比如本来要设置每条记录过期时间为5分钟,则批量加载的时候可以设置过期时间为5~10分钟之间的任意一个毫秒数。这样就可以有效的避免数据集中失效,避免出现缓存雪崩而影响业务稳定。
2、缓存击穿
有效的冷数据预热加载机制
正如前面所提到的,基于内存的缓存,受内存容量限制,往往都会加载一些热点数据。而这些热点缓存数据,可以命中大部分的业务请求。少部分没有命中缓存的数据,则直接转由业务模块进行处理。
缓存击穿和前面提到的缓存雪崩产生的原因其实很相似。区别点在于:
缓存雪崩是大面积的缓存失效导致大量请求涌入数据库。
缓存击穿是少量缓存失效的时候恰好失效的数据遭遇大并发量的请求,导致这些请求全部涌入数据库中。
针对这种情况,我们可以为热点数据设置一个过期时间续期的操作,比如每次请求的时候自动将过期时间续期一下。此外,也可以在数据库记录访问的时候借助分布式锁来防止缓存击穿问题的出现。当缓存不可用时,仅持锁的线程负责从数据库中查询数据并写入缓存中,其余请求重试时先尝试从缓存中获取数据,避免所有的并发请求全部同时打到数据库上。
3、缓存穿透
合理的防身自保手段
我们的系统对外开放并运行的时候,面对的环境险象环生。你不知道请求是来自一个正常用户还是某些别有用心的盗窃者、亦或是个纯粹的破坏者。
缓存穿透问题(缓存穿透与缓存击穿非常相似,区别点在于缓存穿透的实际请求数据在数据库中也没有,而缓存击穿是仅仅在缓存中没命中,但是在数据库中其实是存在对应数据的)。
缓存穿透的情况往往出现在一些外部干扰或者攻击情景中,比如外部爬虫、比如黑客攻击等等。为了解决缓存穿透的问题,可以考虑基于一些类似白名单的机制,当然,有条件的情况下,也可以构建一些反爬策略,比如添加请求签名校验机制、比如添加IP访问限制策略等等。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei456学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。