这几个缓存淘汰算法你知道吗?

码上实战

理论实践相结合,做个好好学习的宝宝!^_^

关注

为什么需要缓存?

因为我们从磁盘中读取文件的速度相较于读取内存中的数据的速度是比较慢的,因此我们将常用的数据存入内存中(我们称之为缓存),以此来加快数据的读取速度。

为什么要淘汰缓存

这个很简单,就是因为我们现在服务器内存有限,不可能不断的将数据存入内存中而不淘汰。况且Java应用会有GC问题,过多的使用内存会造成频繁的FullGC,从而导致应用停顿。我们要做到就是通过淘汰算法让存入内存中的数据能发挥最大价值。

常用算法

FIFO(先进先出)

先进先出算法,很容易理解,核心原则是:先进行缓存的数据先淘汰掉。

实现方式:使用队列来完成。

维度描述
命中率
复杂度简单
存储成本
缺陷速度快,但使用价值不高

LRU(最近最少使用)

最近最少使用可以理解为:最近一段时间最少被访问的数据淘汰掉。

实现方式:一般使用链表完成。

维度描述
命中率较高
复杂度较简单
存储成本一般
缺陷速度较慢,需要遍历链表;仅从时间上考虑,没有考虑频率

LFU(最不经常使用)

最不经常使用:基于最近访问频率来进行淘汰。

实现方式:一般使用Map完成。

维度描述
命中率比LRU较高
复杂度较高
存储成本需要维护所有的访问记录的频率数据结构
缺陷仅考虑频率

推荐阅读

(点击标题可跳转阅读)

Java8 接口改变:静态方法与默认方法

为什么我要使用Optional ?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值