首页 > 中间件 > Redis 缓存淘汰机制

Redis 缓存淘汰机制

作者:bin

关于LRU算法,这里有一个java实现方式使用LinkedHashMap的accessOrder实现LRU算法

redis我们设置key默认是可以不设置缓存时间的,那么如果大量key堆积在内存中,导致内存耗尽,redis就会走内存淘汰机制:
我们可以通过redis.conf中的maxmemory来设置阀值:

#设置内存阀值
maxmemory 1048576B
maxmemory 100KB
maxmemory 100MB
maxmemory 1GB
#设置淘汰策略
maxmemory-policy noeviction

或者也可以动态设置内存策略,无需重启redis

config set maxmemory 100000
config set maxmemory-policy noeviction

下面介绍几种内存淘汰的策略:
volatile-lru(过期热点访问)
从已设置过期时间的数据集中挑选最近最少使用的数据淘汰。redis并不是保证取得所有数据集中最近最少使用的键值对,而只是随机挑选的几个键值对中的, 当内存达到限制的时候无法写入非过期时间的数据集。

volatile-ttl(干掉快死的)
从已设置过期时间的数据集中挑选将要过期的数据淘汰。redis 并不是保证取得所有数据集中最近将要过期的键值对,而只是随机挑选的几个键值对中的, 当内存达到限制的时候无法写入非过期时间的数据集。

volatile-random(过期随机抽)
从已设置过期时间的数据集中任意选择数据淘汰。当内存达到限制的时候无法写入非过期时间的数据集。

allkeys-lru(全值热点访问)
从数据集中挑选最近最少使用的数据淘汰。当内存达到限制的时候,对所有数据集挑选最近最少使用的数据淘汰,可写入新的数据集。

allkeys-random(全值随机抽)
从数据集中任意选择数据淘汰,当内存达到限制的时候,对所有数据集挑选随机淘汰,可写入新的数据集。

no-enviction(不删除)
当内存达到限制的时候,不淘汰任何数据,不可写入任何数据集,所有引起申请内存的命令会报错。

您必须 [ 登录 ] 才能发表留言!