缓存的淘汰策略有几种方式?缓存是将一些需要被经常读取的数据放在磁盘或者内存中,由于追求速度从而一般放在内存中。在有些场景中数据从硬盘读取特别慢,因此要使用缓存提升读取速度,而缓存有容量有限,若缓存满了系统会如何淘汰一些数据?
使用了缓存后因缓存的容量有限,等缓存满了之后需要淘汰一些数据,如 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 服务器的压力
更多精彩推荐 ◡̈ 码上未来 就业榜更新啦~ ◡̈ 为什么互联网行业一边裁员,一边又大规模招人? ◡̈ 为什么年轻人转行会选择IT行业?