跳到主要内容

Redis 运维

部署模式

模式适用场景特点
单机开发/小规模简单,无高可用
主从读多写少读扩展,手动切换
哨兵自动故障转移3 节点起,自动选主
Cluster大规模自动分片,16384 哈希槽
Redis Cluster 部署(6 节点 3主3从)
# 创建集群
redis-cli --cluster create \
10.0.1.1:6379 10.0.1.2:6379 10.0.1.3:6379 \
10.0.1.4:6379 10.0.1.5:6379 10.0.1.6:6379 \
--cluster-replicas 1

# 检查集群状态
redis-cli --cluster check 10.0.1.1:6379

持久化策略

redis.conf
# RDB 快照
save 900 1 # 900 秒内 1 次修改则触发
save 300 10
save 60 10000

# AOF 日志
appendonly yes
appendfsync everysec # 每秒刷盘(推荐)
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

# 混合持久化(推荐,Redis 4.0+)
aof-use-rdb-preamble yes
提示

生产推荐:开启 AOF + 混合持久化(aof-use-rdb-preamble yes),兼顾恢复速度和数据安全。

内存管理

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

# 关键指标
# used_memory: Redis 已用内存
# used_memory_rss: 操作系统视角的实际内存
# mem_fragmentation_ratio: 碎片率(>1.5 需处理)
内存淘汰策略
maxmemory 4gb
maxmemory-policy allkeys-lru # 推荐 LRU
策略说明
noeviction不淘汰,内存满时写入报错
allkeys-lru从所有键中淘汰最近最少使用的
volatile-lru从设置了过期时间的键中 LRU
allkeys-lfuLFU(Redis 4.0+,按频率淘汰)

大 Key 治理

# 扫描大 Key(生产环境用 --bigkeys 需注意影响)
redis-cli --bigkeys -i 0.1 # -i 0.1 每 0.1 秒扫描一批

# memory usage 查看具体 Key 大小
redis-cli MEMORY USAGE user:profile:123
大 Key 风险

大 Key(String > 10MB,集合元素 > 10000)会导致:

  • 操作阻塞(DEL 大 Key 可能阻塞数秒)
  • 主从同步延迟
  • 内存不均衡

解决方案:拆分(Hash 分桶)、异步删除(UNLINK 替代 DEL)、序列化压缩。


常见面试问题

Q1: Redis 集群扩容怎么操作?

答案

# 1. 添加新节点
redis-cli --cluster add-node 10.0.1.7:6379 10.0.1.1:6379

# 2. 迁移哈希槽到新节点
redis-cli --cluster reshard 10.0.1.1:6379

# 3. 添加从节点
redis-cli --cluster add-node 10.0.1.8:6379 10.0.1.7:6379 \
--cluster-slave --cluster-master-id <node-id>

扩容过程对客户端透明,通过 MOVED 重定向保证请求正确路由。

Q2: Redis 内存碎片率过高怎么处理?

答案

  • mem_fragmentation_ratio > 1.5 说明碎片严重
  • Redis 4.0+ 支持在线碎片整理:CONFIG SET activedefrag yes
  • 也可以通过主从切换 + 重启来释放碎片
  • 预防:避免频繁创建删除不同大小的 Key

相关链接