Redis 内存淘汰策略 - Mon, Sep 6, 2021
Redis 内存淘汰策略用于在内存不足时自动清理数据,以释放内存空间。本文介绍 Redis 的各种淘汰策略及其使用方法。
Redis 内存淘汰策略用于在内存不足时自动清理数据,以释放内存空间。本文介绍 Redis 的各种淘汰策略及其使用方法。
提示: Redis 已发布 7.x 版本,带来了许多新特性。建议参考官方文档了解最新功能。
概述
当 Redis 内存使用达到上限时,会根据配置的淘汰策略自动清理数据。合理选择淘汰策略可以优化内存使用和性能。
淘汰策略
| 策略 | 说明 |
|---|---|
| noeviction | 默认策略,不淘汰任何数据。内存已满时,写入操作会报错 |
| allkeys-lru | 在所有键中,删除最近最少使用的键 |
| volatile-lru | 在设置了过期时间的所有键中,删除最近最少使用的键 |
| allkeys-random | 在所有键中,随机删除 |
| volatile-random | 在设置了过期时间的所有键中,随机删除 |
| volatile-ttl | 在设置了过期时间的所有键中,删除存活时间最短的键 |
| allkeys-lfu | 在所有键中,删除使用频率最低的键(Redis 4.0+) |
| volatile-lfu | 在设置了过期时间的所有键中,删除使用频率最低的键(Redis 4.0+) |
配置方法
配置文件方式
编辑 redis.conf 文件:
# 设置最大内存
maxmemory 5gb
# 设置淘汰策略
maxmemory-policy volatile-lru
命令行参数方式
redis-server --appendonly yes --maxmemory 5gb --maxmemory-policy volatile-lru
运行时修改
# 连接到 Redis
redis-cli
# 修改最大内存
CONFIG SET maxmemory 5gb
# 修改淘汰策略
CONFIG SET maxmemory-policy allkeys-lru
# 查看当前配置
CONFIG GET maxmemory
CONFIG GET maxmemory-policy
策略选择建议
- 缓存场景:使用
allkeys-lru或allkeys-lfu - 会话存储:使用
volatile-lru,只淘汰有过期时间的键 - 数据持久化:使用
noeviction,避免数据丢失 - 快速清理:使用
allkeys-random,性能开销最小
监控和调试
# 查看内存使用情况
redis-cli INFO memory
# 查看淘汰统计
redis-cli INFO stats | grep evicted
# 实时监控
redis-cli MONITOR
最佳实践
- 预留空间:设置 maxmemory 时预留 10-20% 空间
- 监控告警:监控内存使用率和淘汰次数
- 定期清理:结合 TTL 定期清理过期数据
- 测试验证:在生产环境前测试淘汰策略的效果
注意事项
- 不同版本的 Redis 支持的策略可能不同
- 使用 LRU/LFU 策略时会消耗额外的 CPU 资源
- 建议根据业务场景选择合适的策略