Redis的内存回收策略
Redis的内存回收策略
Redis的默认回收策略为:maxmemory-policy noeviction
1. volatile-lru -> remove the key with an expire set using an LRU algorithm
采用最近最少的淘汰策略,Redis将回收那些(设置了超时时间的)键值对
2. allkeys-lru -> remove any key according to the LRU algorithm
采用淘汰最少使用的策略,Redis将对所有的键值对采用最近使用最少的淘汰策略
3. volatile-random -> remove a random key with an expire set
采用随机淘汰策略删除(设置了超时时间的)键值对
4. allkeys-random -> remove a random key, any key
采用随机淘汰策略删除所有的键值对,不常用
5. volatile-ttl -> remove the key with the nearest expire time (minor TTL)
采用删除即将过期的键值对策略
6. noeviction -> don't expire at all, just return an error on write operations
不淘汰任何键值对,当内存已满时,Redis将只能读不能写
补充
lru:least recently used;最近使用最少
lfu:Least Frequently Used;Redis4.0里面新加的一种淘汰策略(分为volatile-lfu和allkeys-lfu),根据key的最近被访问的频率进行淘汰,很少被访问的优先被淘汰,被访问的多的则被留下来
ttl:Time to Live存活时间
这两种算法都不是很精确的算法,而是一个近似的算法(只从随机样本中进行lru淘汰,样本大小可以通过maxmemory-samples参数设置)
Redis的key过期删除策略
Redis提供了四个命令来设置过期时间(生存时间)。
- EXPIRE
:表示将键 key 的生存时间设置为 ttl 秒。 - PEXPIRE
:表示将键 key 的生存时间设置为 ttl 毫秒。 - EXPIREAT
:表示将键 key 的生存时间设置为 timestamp 所指定的秒数时间戳。 - PEXPIREAT
:表示将键 key 的生存时间设置为 timestamp 所指定的毫秒数时间戳。
在Redis内部实现中,前面三个设置过期时间的命令最后都会转换成最后一个PEXPIREAT 命令来完成。
PERSIST:表示将key的过期时间移除。
TTL:以秒的单位返回键 key 的剩余生存时间。
PTTL:以毫秒的单位返回键 key 的剩余生存时间。
Redis删除key有三种方式:
- 定时删除:在设置某个key 的过期时间同时,我们创建一个定时器,让定时器在该过期时间到来时,立即执行对其进行删除的操作;
- 惰性删除:设置该key 过期时间后,我们不去管它,当需要该key时,我们在检查其是否过期,如果过期,我们就删掉它,反之返回该key;
- 定期删除:每隔一段时间,我们就对一些key进行检查,删除里面过期的key。
Redis的过期删除策略是:惰性删除和定期删除两种策略配合使用
定期删除的运行频率,每秒运行10次,可在配置文件redis.conf中设置:hz 10

浙公网安备 33010602011771号