Redis服务的内存被占满时,会对内存的数据进行清理。Redis 4.0 之前一共实现了 6 种内存淘汰策略,在 4.0 之后,又增加了 2 种策略。具体的策略如下:
-
不进行数据淘汰
- no-enviction(默认的策略):当内存用完之后,写数据会报错,读不受影响。
-
针对已设置过期时间的数据集中:
- volatile-lru:从已设置过期时间的数据集中,淘汰最近最少使用的数据。
- volatile-ttl:从已设置过期时间的数据集中,淘汰最早会过期的数据。
- volatile-random:从已设置过期时间的数据集中,随机淘汰数据。
- volatile-lfu(Redis 4.0 后新增):从已设置过期时间的数据集中,淘汰使用频率最低的数据。
-
针对所有的数据集:
- allkeys-lru:淘汰最近最少使用的数据。
- allkeys-random:随机淘汰数据。
- allkeys-lfu(Redis 4.0 后新增):淘汰使用频率最低的数据。
如何配置:
我们通过配置redis.conf中的maxmemory这个值来开启内存淘汰功能。
# maxmemory
值得注意的是,maxmemory为0的时候表示我们对Redis的内存使用没有限制。
根据应用场景,选择淘汰策略
# maxmemory-policy noeviction
设置最大内存
config set maxmemory 100000
设置淘汰策略
config set maxmemory-policy noeviction