架构解密从分布式到微服务:深入浅析内存,内存缓存技术分析

内存缓存技术分析

缓存概述

缓存在计算机世界里从来都是一个不可忽视的重要因素,我们在计算机系统中经常能见到缓存的存在,例如网卡上的硬件缓存、数据库系统中用来加速数据查询的缓存区、Web Server及浏览器用来加快网站访问速度的网页缓存目录等。总体上来说,会影响运行速度的逻辑都可能通过缓存的方式来改善或者解决,不管是硬件设备还是软件系统。

缓存也被称为Cache(不同于CPU内部的Cache),本质上来说,缓存就是数据交换的一段缓冲区,相当于一个“台阶”,用来大幅度缩减数据交换双方在“数据匹配速度”方面的巨大鸿沟。

我们在使用缓存时需要清楚地认识到缓存的数据随时可能会丢失,即使某些缓存组件或者缓存中间件提供了一些数据持久化的功能,例如Redis可以把缓存的数据写入磁盘中,但我们要明白这种辅助功能并不是缓存系统的核心,因为缓存的目的是提供高速的数据访问性能,而一旦涉及磁盘IO操作,则其性能必然大打折扣,从而降低缓存的价值。

在有限的存储空间中,究竟哪些数据适合缓存呢?一般原则是优先考虑缓存符合下述特征的数据。

  • 一旦生成就基本不会变的数据。
  • 频繁访问的数据(热点数据)。
  • 计算代价很大的数据。

一旦生成就基本不会变的数据很符合缓存的要求,这类数据由于不涉及复杂的数据同步问题,所以只要将其装载到缓存中即可,所以编程很简单。如果这类数据被频繁使用,则特别适合将其放入缓存中,比如网站中用户的Session信息、浏览过的商品列表、历史足迹等。

某些计算代价很大的数据,在特定的一些情况下也适合进行缓存。比如对于一个复杂的报表或查询,需要1分钟或更长的时间才能计算出来,此时,如果预先在后台计算出来并且缓存结果,那么用户在单击并访问报表时,就会感觉速度非常快,体验非常好。再比如,某个SQL查询非常消耗数据库的CPU,因此会对数据库服务器造成比较大的压力,如果几个用户同时单击了这个查询按钮,那么可能导致数据不堪重负而停止响应!在这种情况下,我们也可以采用缓存技术来解决问题,即缓存查询结果集5分钟,后面的用户直接访问之前用户的查询缓存结果。虽然这种做法可能会导致某些用户看到过时的数据,但总比系统崩溃影响全部用户好得多。另外,在很多情况下,用户只是浏览一下数据而已,并不关心数据的细节,比如电商网站里的商品列表信息;用户真正关心的是商品的图片、价格,而对于库存在当前究竟是99件还是999件,并不在意。

缓存数据具有很强的时效性,存储空间又有限,这便决定了缓存系统必须以某种方式淘汰旧数据,缓存新数据。最优的淘汰策略就是把缓存中最没用的数据给踢出去,但未来是不能够被预知的,所以这种策略只是我们的一厢情愿!我们设计了很多策略,都是奔着这个“终极目标”去努力的,这些不同的策略没有哪个更好,只有哪个更合适。在不同的场景下如何判断和选择最合适的淘汰策略也是一个需要经验和技能二合一的难题。下面讲解在缓存系统中采用的缓存淘汰策略。

(1)Least Frequently Used(LFU)策略:缓存系统会为每个缓存条目都计算被使用的频率,在淘汰时先淘汰最不常用的缓存条目。CPU的Cache所采用的淘汰策略为LFU策略。

(2)Least

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值