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-lfu | LFU(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