干货丨缓存的淘汰策略有几种?分别怎么用?

cdfc989871d8896d52bfb6c7b6b9f8da.gif

缓存是指,将一些需要读取数据放在磁盘或者内存中,由于追求速度从而一般是放在内存中。缓存容量有限,若缓存满了系统是如何淘汰一些数据的呢?

使用了缓存后因缓存的容量有限,等缓存满了之后需要淘汰一些数据,如Map数据结构是一个思路,我们自己的电脑存储文件或者是和JVM存储对象一样,内存不是无限的。

因此在实现缓存时必须要设计一套缓存淘汰策略,按照某种机制回收缓存占用的内存,保证缓存数据不会无限地增长直到撑爆内存。

dfe4ab9e725416187265e3823e8405a8.gif

 缓存的淘汰策略 

一、 LRU 最近最少使用

LRU(Least Recently Used)是最经典的内存淘汰策略,其设计原则是 “如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小”。即根据数据的最近访问时间来进行淘汰,缺点是可能会由于一次冷数据的批量查询而误删除大量的热点数据。

二、近似 LRU 算法

类似 LRU 算法,只是每次随机选择一批数据进行 LRU 淘汰,而不是全量 LRU 运算,牺牲部分准确度,以提升算法执行效率。Redis 3.0 之后对其进行了优化,维护了一个侯选池将随机选择的数据放入侯选池中进行 LRU 运算。当侯选池放满后新随机的数据会替换掉池中最近被访问的数据。

三、 TTL 超时时间

TTL(Time To Live)是指用户为缓存设置的过期时间,当前时间到达过期时间时将删除缓存;如果缓存空间已满,则优先淘汰最接近过期时间的数据。

四、LFU 最近最不经常使用

LFU(Least Frequently Used)策略会记录每个缓存数据的最近访问次数(频率),并优先清除使用次数较少的数据。这种算法存在的显著缺点是,最新写入的数据由于访问次数少,常常刚被缓存就删除了。

五、FIFO 先进先出

FIFO(First In First Out)先进先出策略会将数据按照写入缓存的顺序进行排队,当缓存空间不足时,最先进入缓存的数据会被优先删除。是一种比较死板的策略不考虑数据热度可能会淘汰大量的热点数据,但是实现起来相对容易。

六、Random 随机淘汰策略

随机淘汰策略,一般不建议使用。

缓存有很多优点,缓存时能够最快提高服务响应速度的优化,使用缓存能够最快以非常高的效率提高应用的性能。

通过缓存加速读写速度,在内存中读写比硬盘速度快,降低数据库服务器的负载:比如业务端的请求的数据大多数都由Redis服务器来处理,大大减轻MySQL服务器的压力。

fd3a7b5e1534fd2441f6f88a74d499b6.png28ee5c6efe61f586e3997b9ac98d6fac.pnge95883b3abcda9b380d077f425d7964f.png

以上就是播妞为大家分享的干货内容

希望对你有所帮助

 黑马程序员 

累计培养30余万名优质IT人才

8大学科火热报名中

基础班仅需 28 元,扫码免费咨询

62b7353926b0c88c7caa060ca8a8b1de.png

线上课程咨询联系播妞(微信:heiniu526)

b3c4a2439ee36a05815038c48296af67.png

丨热门教程资源免费领丨

回复【领取资源】领《黑马8学科汇总教程》

回复【1026】领《SpringBoot2全套》

回复【瑞吉外卖】领《瑞吉外卖项目教程》

回复【mysql1】领《Mysql入门到精通》

回复【毕业设计】领《Java毕业设计项目》

更多教程加播妞领取:heiniu526

(在下方公众号回复对应关键词,即可领取哦)

↓↓↓

c512f2fea01c77b50008e1e038eed22f.gif

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值