Redis 的过期策略和内存淘汰策略是管理内存和数据有效性的两个重要机制。以下是对这两者的详细介绍:
过期策略
Redis 允许为键设置过期时间,当键的过期时间到达时,Redis 会自动将其删除。过期策略主要包括:
-
定期删除:
- Redis 会定期检查已设置过期时间的键,每隔一定时间(默认 100 毫秒)随机抽取一些键进行检查。如果发现其已过期,则删除这些键。
-
惰性删除:
- 每次访问键时,Redis 会检查这个键是否已过期。如果已过期,则将其删除,并返回 nil。
-
过期设置:
- 可通过
EXPIRE
命令设置键的过期时间,单位为秒;也可以使用PEXPIRE
命令设置毫秒。
- 可通过
内存淘汰策略
当 Redis 的内存达到最大限制时,它会根据设置的内存淘汰策略来决定哪些数据可以被删除。这些策略包括:
-
noeviction:
- 当内存达到限制时,禁止写入操作。读取操作仍然可以执行,返回错误。
-
allkeys-lru:
- 从所有键中选择最近最少使用 (LRU) 的键进行删除,以为新写入操作腾出空间。
-
volatile-lru:
- 仅从设置了过期时间的键中选择最近最少使用的键进行删除。
-
allkeys-random:
- 从所有键中随机选择键进行删除。
-
volatile-random:
- 仅从设置了过期时间的键中随机选择键进行删除。
-
volatile-ttl:
- 仅从设置了过期时间的键中选择生存时间 (TTL) 最近的键进行删除。
总结
- 过期策略 主要用于管理键的有效性,确保过期的键会被及时删除。
- 内存淘汰策略 则在内存达到设定限制时决定删除哪些键以释放空间。