redis之内存淘汰策略和过期删除策略

前言

redis是基于内存的,如果内存超过限定值(redis配置文件的maxmemory参数决定redis最大内存使用量),导致新的数据存不进去,此时redis会根据淘汰策略删除一些数据

 

一 内存淘汰策略

淘汰策略由redis配置文件的maxmemory-policy参数决定设置,默认为no-eviction模式

 

淘汰策略的执行过程

1) 执行写请求时,redis会检查内存使用情况,内存使用超过限定值,按照淘汰策略删除key

2) redis写入新数据

 

1 noeviction

当写入新数据后的内存超过限定值时,写请求直接返回错误,只读请求可以正常执行,默认策略

 

2 allkeys-lru

当写入新数据后的内存超过限定值时,从所有key中使用LRU算法(最近最少使用算法)淘汰最久没有使用过的key

 

3 volatile-lru

当写入新数据后的内存超过限定值时,从设置了过期时间的key中使用LRU算法淘汰最久没有使用过的key

 

4 allkeys-random

当写入新数据后的内存超过限定值时,从所有key中随机淘汰key

 

5 volatile-random

当写入新数据后的内存超过限定值时,从设置了过期时间的key中随机淘汰key

 

6 volatile-ttl

当写入新数据后的内存超过限定值时,从设置了过期时间的key中根据过期时间淘汰key,越快过期越早淘汰

 

7 allkeys-lfu

当写入新数据后的内存超过限定值时,从所有key中使用LFU算法(最少频率访问算法)淘汰使用频率最低的key

 

8 volatile-lfu

当写入新数据后的内存超过限定值时,从设置了过期时间的key中使用LFU算法淘汰使用频率最低的key

 

二 过期删除策略

前面的八种淘汰策略都是在内存超过限定值才会使用,当内存没有达到限定值,redis也会使用策略删除过期的key

 

1 定时删除

key设置了过期时间,一旦过期立即删除

 

优点

key一旦过期就会立即删除,不会占用内存

 

缺点

过期key较多时,删除key会占用CPU时间,影响服务器的响应时间,吞吐量,性能

 

2 惰性删除

过期key不会马上被删除,而是继续保存在内存中,当key被访问时检查key的过期时间,若已过期则删除

 

优点

只在访问时才会对检查key的过期时间,没使用的key不会占用CPU的时间去检查过期时间,不会影响服务器的响应时间,吞吐量,性能

 

缺点

没有被访问的过期key继续保存在内存中,导致内存不会被释放,消耗内存资源

 

3 定期删除

每隔一段时间(时间可以自行设置,redis配置文件的hz参数表示1s执行多少次定期删除策略,默认值10),随机抽取设置了过期时间的key检查它们的过期时间,删除已过期的key

 

优点

可以指定频率来减少删除操作对CPU性能的影响

定期删除也能释放没有被访问的过期key占用的内存

 

缺点

频率高影响CPU的性能

频率低过期key占用的内存不会及时释放

posted @ 2023-03-12 18:56  junffzhou  阅读(133)  评论(0编辑  收藏  举报