龙空技术网

让我爱不释手的“缓存”却也伤我最深

陕西文都智链 90

前言:

而今我们对“缓存过期是什么意思”可能比较关怀,我们都想要了解一些“缓存过期是什么意思”的相关知识。那么小编同时在网摘上搜集了一些关于“缓存过期是什么意思””的相关资讯,希望看官们能喜欢,姐妹们一起来学习一下吧!

缓存的使用是一个逐渐演进的过程,我们为什么要使用缓存呢?其实就是贪图一个快!从最开始使用缓存,一些数据库里存储的不变的信息配置,服务运行时,直接到公共模块进行加载,方便其他功能模块来共享。

服务与缓存

服务其实就是一层应用+一层数据,在数据层获得数据之后再加工输出。

数据层,我们通常说的是持久化介质上的持久化储存,它既可以是文件,也可以是数据库等。数据储存在持久化介质上,应用在内存中运行。内存和持久化介质存在两个有着量级速度差别的不同介质,所以应用和数据之间就起了“冲突”。

我们所说的缓存是必须要存放在内存中的,这个时候它距离应用更近,可以最快的给出数据来获取服务器的响应。

当然,并不是缓存隔绝持久层的数据。伴随着缓存还有一个词语叫命中率。

当查询的数据在缓存内部时,我们叫做“命中”,这个时候可以由缓存直接提供数据。

而对于“未命中”的数据来说,则需要去持久化数据层获取数据,我们称之为缓存穿透。当获取数据完成,我们需要补充缓存然后返回给应用来供给下一次“命中”查询。当然,我们上述只是指“读”查询情景。当应用发生数据操作变更,我们则需要将变更同时更新到持久层及缓冲层。在这个时候,我们就面临了一个新的问题,就是“先与后”。

我们称这个问题为缓存一致性问题,如果将缓存先更新,则会出现持久层更新失败的问题进而产生缓存脏数据。反过来如果先更新持久层,我们又必须面对从持久层更新成功后到缓存更新之前的这个间期缓存对外提供旧数据的尴尬问题,尤其是在高并发环境中,需要针对场景进行精准控制。

缓存与更新

以实际问题入手可以划分为强一致性需求、弱一致性需求及最终一致性需求

强一致性需求

比如交易信息,下单,支付等,需要我们及时进行关联并保证事物层的一致性。应运而生的许多分布式事物理论也为我们解决问题提供了很好的方案。

弱一致性需求

设计一些不太重要的信息更新等,比如不外显的描述信息,统计性的计数缓存信息,通常可以采取异步处理的方式。例如票价信息,30s更新的热点信息等等。

最终一致性需求

保障数据状态的最终一致性

缓存粒度

就是缓存信息块层级,大小。选择何种粒度进行缓存,取决于应用整体的架构,数据存储规划及具体应用场景。根据不同的数据粒度,存储缓存的形式也不同,每种形式都有自己的优缺点,选用时可以从应用、储存及维护成本各方面进行评估后再选择。

缓存穿透的危害

数据暂时不存在于缓存内

暂时的意思就是数据还没有加载至缓存,lazy load 按需按时实时加载应用。也可以是缓存数据被我们特定的缓存过期策略自动或主动过期,通常使用的过期策略包括元素数量限制,内存占用限制及生存时间限制。

数据不存在

当一个请求查询不存在数据时,必然会穿过缓存进入到持久化储存层。这一层的响应能力是有限的,当这种请求达到一定数量,那么宕机的问题就可能会出现。至此就要延伸对缓存作用的进一步认知:降低下层负载,保护后端资源。

可以简单将原因分为两方面:内部的逻辑问题、外部恶意攻击或爬虫干扰。

内部问题是比较好解决的,进行良性的优化就可以。外部问题比较难以预料,需要更加谨慎地进行多方面防御性处理。五路内外,缓存层只需要处理好有效拦截穿透这一件事就好。到这时候,通常的惯性思维就是将造成缓存穿透的数据置入到缓存内部。对于已经删除掉的用户数据,做缓存层的软删除处理即可。

标签: #缓存过期是什么意思