后端经典面试题合集, 讲一下 Redis 中的内存淘汰机制,有哪些内存淘汰策略?
后端经典面试题合集, 讲一下 Redis 中的内存淘汰机制,有哪些内存淘汰策略?
QA
Step 1
Q:: 什么是 Redis 的内存淘汰机制?
A:: Redis 的内存淘汰机制是指当 Redis 使用的内存达到配置的最大值时,Redis 会根据预设的策略淘汰(删除)一些数据以释放内存空间,从而容纳新的数据。这种机制用于防止 Redis 内存无限增长导致系统崩溃。
Step 2
Q:: Redis 有哪些内存淘汰策略?
A:: Redis 提供了多种内存淘汰策略,包括:
1. **noeviction**:
当内存不足时,不再执行写操作,直接返回错误。
2. **allkeys-lru**:
优先淘汰最近最少使用的键。
3. **volatile-lru**:
只淘汰设置了过期时间的键,并优先淘汰最近最少使用的键。
4. **allkeys-random**:
随机淘汰任意键。
5. **volatile-random**:
随机淘汰设置了过期时间的键。
6. **volatile-ttl**:
优先淘汰那些剩余生存时间最短的键。
Step 3
Q:: 什么是 LRU 算法?
A:: LRU(Least Recently Used)是最近最少使用算法,是一种缓存淘汰策略。其基本思想是:当缓存空间满时,优先淘汰那些最近最少使用的数据,以给新的数据腾出空间。Redis 的 allkeys-lru 和 volatile-
lru 策略均基于此算法。
Step 4
Q:: Redis 默认使用什么内存淘汰策略?
A:: Redis 默认使用的是 noeviction 策略,即当内存不足时不进行任何数据淘汰操作,而是直接返回错误。这种策略适用于需要保证数据不丢失的场景。
Step 5
Q:: 如何在 Redis 中配置内存淘汰策略?
A:: 可以通过修改 redis.
conf 配置文件中的 maxmemory-policy
参数来设置 Redis 的内存淘汰策略。例如:maxmemory-policy allkeys-lru
会将策略设置为所有键的最近最少使用淘汰。