内存缓存(cache)常用淘汰算法

简介

在工程实践中,完成一个项目,通常可以分两步走:

  1. 产品实现,即完成产品的编码,实现产品需求,能够提供所需的功能;
  2. 产品优化,即对产品已有功能进行优化,可以是并发度、延时、qps等各个方面的优化;

当然,也可以两步合一步走,在代码实现的同时,就将产品优化考虑进去,但实际情况,产品往往要求优先提供功能,即该产品要具有某种能力,所以开发周期比较偏短,难以将深层次代码优化一起考虑进去,实际情况一般都是快速迭代,分两步走的方式,甚至可以是实现多个功能后再一起优化。

以上也只是工作中的一些体会,并不代表所有的项目开发情况。

其中,内存缓存(cache) 是我们在进行产品优化过程中,经常会用到的一种手段,举例如下:

微信中发的一条朋友圈动态,动态内容一般都是由 图片 + 文字 的方式呈现,这些内容统统存储在后台服务器中的磁盘中,每有一个人来查看你的朋友圈动态,就需要从磁盘中读取一次,如果你是有5000好友的社交达人,那么极端情况下会有5000次 并发访问 朋友圈的情况,这时,就会出现刷新2分钟都看不到朋友圈动态的情况,你说急不急?

当然,为了防止上述情况的出现,最常用的就是通过内存缓存来进行优化了,将动态内存放到内存中,每访问一次不需要从磁盘读取,只需要从内存读取,内存的访问时间一般在ns级,磁盘的访问时间在ms级,具体时间可查阅相关资料,通过内存缓存大大降低了数据的读取延时,也就不会出现等待2分钟还刷不出来动态地情况了。

然而,内存空间总是有限的,目前无法将所有的数据全部放入内存,只能够将部分热点数据放到内存,同时,热点数据又不是一成不变的,这就会产生将已经过时的热点数据从内存淘汰,再加入新的热点数据的问题,这就是内存缓存中会遇到的淘汰问题,对于内存缓存的淘汰问题,常用的解决算法主要有以下几种:
OPT、FIFO、LRU、2Q、LIRS等等,下面主要来看下每个算法是如何实现的,又具有怎样的优缺点。

缓存淘汰算法

不可能实现的算法 OPT

OPT(OPTimal Replacement,OPT)算法,其所选择的被淘汰的数据将是以后永不使用的,或是在最长(未来)时间内不再被访问的数据。

未来发生的事情是无法预测的,所以该算法从根本上来说是无法实现的,OPT算法对于内存缓存来说,能够提供最高的cache命中(cache hite)率,通过OPT算法也可以衡量其他缓存淘汰的算法的优劣。

无脑算法 FIFO

FIFO(First Input First Output,FIFO)算法算是一种很无脑的淘汰算法,实现起来也很简单

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值