在线客服
扫描二维码
下载博学谷APP扫描二维码
关注博学谷微信公众号
缓存的淘汰策略有几种方式? 缓存是将一些需要读取数据放在磁盘或者内存中,由于是追求速度从而一般放在内存中。在有些场景中无法解决读的速度,因此要使用缓存,而缓存有容量有限,若缓存满了系统会如何淘汰一些数据?
使用了缓存后因缓存的容量有限,等缓存满了之后需要淘汰一些数据,如Map数据结构是一个思路,我们自己的电脑存储文件或者是和JVM存储对象一样,内存不是无限的,因此在实现缓存时必须要设计一套缓存淘汰策略,按照某种机制回收缓存占用的内存保证缓存数据不会无限地增长直到撑爆内存。
缓存的淘汰策略如下:
一、 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服务器的压力
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
年薪40万+的高级Java开发程序员需要掌握哪些技能?
年薪40万+的高级Java开发程序员需要掌握哪些技能?40w年薪税前,400000/12约为34k,月薪在3.4万以上;40w年薪税后,税前年薪要50w起了,这样税前月薪就是4.2万,一个月能拿42000元以上,税后月薪约30K,实际到手30000元,然后全年税后工资 35W + 5W公积金差不多就是40w年薪了。
11108
2019-05-16 16:56:45
Kotlin与Java相比的优缺点有哪些?
Kotlin语言被谷歌公开作为Android官方开发语言之后,就有传言,kotlin会取代Java。然而即使到了现在还是有很多人并不了解kotlin是什么。所以今天小编给大家科普一下关于kotlin的一些问题。
15061
2019-08-09 18:03:46
数据结构应该怎么学?有哪些建议?
随着计算机科学和互联网技术的日新月异,越来越多的人选择投身于程序员这一职业。尤其是目前的市场中高端的程序员,还处于巨大的人才缺口之中。而低端程序员和中高端程序员一个显著的差别就是,数据结构这一内功掌握得怎么样。那么可能会有人问了:数据结构应该怎么学?有哪些建议呢?下面我们就来看看具体的学习方法。
6605
2020-02-14 19:11:18
现在学Java编程开发好就业吗?
现在Java就业市场如何?如果从现在开始学习Java编程开发好就业吗?是不是真的如网上各种文章说的一样,Java开发工程师就业市场人才缺口非常大呢?其实在小编看来,现在的Java就业市场可以总结为两句话:就业机会多,但就业门槛正在不断提升!现在开始学习Java编程开发是否好就业,已经不仅仅是市场需求所决定的,更重要的是通过学习对知识的掌握的程度是否能够与企业招聘需求想匹配。
4618
2020-07-24 16:14:52
零基础学Java还是Python开发?
没有基础想学习一门编程语言,不知道学Java好还是学python更合适,在选择学Java编程语言还是python编程语言之前,要清楚自己学习编程的目的,是为了学会变成后跳入互联网企业工作,为转行做准备;还是想快速入门编程语言,学习一份技能傍身。前者建议学习Java,后者议学习python。
4026
2021-01-13 11:03:37