大家好,我是锋哥。今天分享关于【说说Redis的内存淘汰策略?】面试题。希望对大家有帮助;
说说Redis的内存淘汰策略?
1000道 互联网大厂Java工程师 精选面试题-Java资源分享网
Redis 提供了几种内存淘汰策略,当 Redis 的内存达到上限时,决定如何处理新增数据。下面是 Redis 支持的内存淘汰策略:
-
noeviction(不淘汰策略)
- 这种策略下,Redis 在内存不足时会拒绝写入新数据。也就是说,如果 Redis 已经达到最大内存限制,再写入操作会报错(
OOM command not allowed when used memory > 'maxmemory'
)。
- 这种策略下,Redis 在内存不足时会拒绝写入新数据。也就是说,如果 Redis 已经达到最大内存限制,再写入操作会报错(
-
allkeys-lru(LRU 淘汰策略)
- 当内存满了,Redis 会使用 LRU(Least Recently Used,最近最少使用)算法淘汰最近最少使用的键值对,释放内存。这种策略不管是过期键还是其他键,都会根据使用频率来淘汰。
-
volatile-lru(LRU 淘汰策略,仅限于设置了过期时间的键)
- 该策略只会对设置了过期时间的键使用 LRU 算法。当内存达到限制时,Redis 会删除最近最少使用的带过期时间的键。
-
allkeys-random(随机淘汰策略)
- Redis 会随机选择键来进行淘汰,释放内存。这个策略适用于不关心具体被淘汰哪个键的场景。
-
volatile-random(随机淘汰策略,仅限于设置了过期时间的键)
- 该策略与
allkeys-random
类似,但只会对设置了过期时间的键进行随机淘汰。
- 该策略与
-
volatile-ttl(按过期时间淘汰策略)
- Redis 会优先淘汰那些即将过期的键。这种策略适合当你希望优先清理掉即将过期的数据时使用。
-
noeviction + expire
- 结合
noeviction
和expire
机制,确保在淘汰数据时以时间为标准的策略处理,帮助 Redis 处理好内存空间。
- 结合
如何配置?
Redis 中可以通过配置文件 redis.conf
或在运行时通过 CONFIG SET
命令设置 maxmemory
和 maxmemory-policy
来指定内存限制和淘汰策略。例如:
maxmemory 2gb
maxmemory-policy allkeys-lru
这样设置后,Redis 会在内存达到 2GB 后使用 allkeys-lru
策略进行内存淘汰。
不同的淘汰策略适合不同的使用场景,选择合适的策略可以有效提高 Redis 的性能和资源利用率。