kaisawind's blog
  • 关于
  • 所有帖子

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

策略选择建议

  1. 缓存场景:使用 allkeys-lru 或 allkeys-lfu
  2. 会话存储:使用 volatile-lru,只淘汰有过期时间的键
  3. 数据持久化:使用 noeviction,避免数据丢失
  4. 快速清理:使用 allkeys-random,性能开销最小

监控和调试

# 查看内存使用情况
redis-cli INFO memory

# 查看淘汰统计
redis-cli INFO stats | grep evicted

# 实时监控
redis-cli MONITOR

最佳实践

  1. 预留空间:设置 maxmemory 时预留 10-20% 空间
  2. 监控告警:监控内存使用率和淘汰次数
  3. 定期清理:结合 TTL 定期清理过期数据
  4. 测试验证:在生产环境前测试淘汰策略的效果

注意事项

  • 不同版本的 Redis 支持的策略可能不同
  • 使用 LRU/LFU 策略时会消耗额外的 CPU 资源
  • 建议根据业务场景选择合适的策略


辽ICP备2021007608号 | © 2026 | kaisawind

Facebook Twitter GitHub