redis的缓存淘汰策略lru与lfu

author author     2023-05-10     634

关键词:

参考技术A Redis缓存淘汰策略与Redis键的过期删除策略并不完全相同,前者是在Redis内存使用超过一定值的时候(一般这个值可以配置)使用的淘汰策略;而后者是通过定期删除+惰性删除两者结合的方式淘汰内存过期键的。
这里参照官方文档的解释重新叙述一遍过期删除策略:当某个key被设置了过期时间之后,客户端每次对该key的访问(读写)都会事先检测该key是否过期,如果过期就直接删除;但有一些键只访问一次,因此需要主动删除,默认情况下redis每秒检测10次,检测的对象是所有设置了过期时间的键集合,每次从这个集合中随机检测20个键查看他们是否过期,如果过期就直接删除,如果删除后还有超过25%的集合中的键已经过期,那么继续检测过期集合中的20个随机键进行删除。这样可以保证过期键最大只占所有设置了过期时间键的25%。

在Java中LRU的实现方式是使用HashMap结合双向链表,HashMap的值是双向链表的节点,双向链表的节点也保存一份key value。

LFU是在Redis4.0后出现的,LRU的最近最少使用实际上并不精确,考虑下面的情况,如果在|处删除,那么A距离的时间最久,但实际上A的使用频率要比B频繁,所以合理的淘汰策略应该是淘汰B。LFU就是为应对这种情况而生的。

缓存失效策略(fifo,lru,lfu)

当缓存需要被清理时(比如空间占用已经接近临界值了),需要使用某种淘汰算法来决定清理掉哪些数据。常用的淘汰算法有下面几种:1.FIFO:FirstInFirstOut,先进先出。判断被存储的时间,离目前最远的数据优先被淘汰。2.LRU:L... 查看详情

redis源码六-redis中的缓存淘汰策略处理分析(代码片段)

...redis的过期策略。这次我来探究一下。我们都知道redis的缓存淘汰策略有以下几种:noeviction无过期策略,内存满了就直接异常volatile-lru对有过期时间的key进行lru淘汰(越长时间没有被访问,越容易被淘汰)allkeys-lru... 查看详情

缓存机制

缓存污染:缓存污染降低了缓存的使用率,把不常用的数据读取到缓存,同时会把常用的数据移出缓存,这样会直接降低系统的数据命中率回避策略使用缓存淘汰算法(如:LFU, LRU)可以有效降低缓存污染的现象。对缓存机... 查看详情

缓存数据库redis之三:内存淘汰策略及优化(代码片段)

目录一、Redis的内存淘汰策略  1.1.概念  1.2.策略一:全局的键空间选择性移除  1.3.策略二:设置过期时间的键空间选择性移除  1.4.LRU、LFU和volatile-ttl都是近似随机算法 1.4.1.LRU算法 1.4.2.LFU算法1.5.过期删除策略1.6.AOF... 查看详情

缓存数据库redis之三:内存淘汰策略及优化(代码片段)

目录一、Redis的内存淘汰策略  1.1.概念  1.2.策略一:全局的键空间选择性移除  1.3.策略二:设置过期时间的键空间选择性移除  1.4.LRU、LFU和volatile-ttl都是近似随机算法 1.4.1.LRU算法 1.4.2.LFU算法1.5.过期删除策略1.6.AOF... 查看详情

吃透redis:缓存淘汰篇-lru算法(代码片段)

...数据库,当内存使用达到了一定阈值,就会触发缓存淘汰策略,这和Redis配置文件redis.conf中的两个配置参数有关:maxmemory,该配置项设定了Redisserver可以使用的最大内存容量,一旦server使用的实际内存量超... 查看详情

redis——内存淘汰策略

一、缓存耗尽的原因1、每台机器的内存是一定的2、key未设置过期时间key不设置过期时间则在内存中一直存在,直到我们明确删除它。3、过度或不合理的持久化无论RDB快照或者AOF日志,都会在内存和磁盘中反复操作,需要一定的... 查看详情

redis内存淘汰策略

...器的递增和递减,例如:lfu-log-factor10lfu-decay-time1递增:缓存一自被命中,则计数器会递增递减:过几分钟后,没有被命中,则计数器会递减 查看详情

redis淘汰策略

...最大的内存设置为0,相当于基于物理机的最大值二、淘汰策略1.8种策略volatile-lru,针对设置了过期时间的key,使用lru算法进行淘汰。allkeys-lru,针对所有key使用lru算法进行淘汰。volatile-lfu,针对设置了过期时... 查看详情

分布式技术专题「分布式缓存专题」针对于缓存淘汰算法之lru和lfu及fifo原理分析

前提概要无论是浏览器缓存(如果是chrome浏览器,可以通过chrome:://cache查看),还是服务端的缓存(通过memcached或者redis等内存数据库)。缓存不仅可以加速用户的访问,同时也可以降低服务器的负载和压力。那么了解常见的缓存淘汰... 查看详情

分布式技术专题「系统功能原理分析」缓存淘汰算法之lru和lfu及fifo介绍(代码片段)

前提概要无论是浏览器缓存(如果是chrome浏览器,可以通过chrome:😕/cache查看),还是服务端的缓存(通过memcached或者redis等内存数据库)。缓存不仅可以加速用户的访问,同时也可以降低服务器的负载和压力。那么了... 查看详情

缓存数据库redis之三:内存淘汰策略及优化(代码片段)

...略  1.1.概念    Redis的内存淘汰策略是指在Redis的用于缓存的内存不足时,怎么处理需要新写入且需要申请额外空间的数据。  1.2.策略一:全局的键空间选择性移除-noeviction:当内存不足以容纳新写入数据时,... 查看详情

吃透redis:缓存淘汰篇-lfu算法

文章目录一、概述二、LFU算法的基本原理三、LFU算法的实现1、键值对访问频率记录2、键值对访问频率的初始化与更新2-1、键值对被创建时2-2、键值对被访问时3、LFU算法淘汰数据四、总结一、概述Redis在4.0版本后,还引入了LF... 查看详情

两种缓存淘汰算法lfu&lru

LRU全称是Least RecentlyUsed,即最近最久未使用的意思。LRU算法的设计原则是:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。也就是说,当限定的空间已存满数据时,应当把最久没有被访问... 查看详情

redis前传自己手写一个lru策略|redis淘汰策略(代码片段)

一、题目描述146.LRU缓存机制运用你所掌握的数据结构,设计和实现一个LRU(最近最少使用)缓存机制。实现LRUCache类:LRUCache(intcapacity)以正整数作为容量capacity初始化LRU缓存intget(intkey)如果关键字key存在于缓存中,则返回... 查看详情

redis前传自己手写一个lru策略|redis淘汰策略(代码片段)

一、题目描述146.LRU缓存机制运用你所掌握的数据结构,设计和实现一个LRU(最近最少使用)缓存机制。实现LRUCache类:LRUCache(intcapacity)以正整数作为容量capacity初始化LRU缓存intget(intkey)如果关键字key存在于缓存中,则返回... 查看详情

吃透redis:缓存淘汰篇-lru算法(代码片段)

...数据库,当内存使用达到了一定阈值,就会触发缓存淘汰策略,这和Redis配置文件redis.conf中的两个配置 查看详情

吃透redis:缓存淘汰篇-lru算法(代码片段)

...数据库,当内存使用达到了一定阈值,就会触发缓存淘汰策略,这和Redis配置文件redis.conf中的两个配置 查看详情