文章背景图

Redis 运维与面试核心:数据结构、过期、持久化、高可用和故障排查

2026-07-25
4
-
- 分钟

理解 Redis 不能只背“单线程很快”。命令执行模型、I/O 线程、持久化、复制和集群行为会随版本与配置不同,面试和生产排障都应基于实际指标。

## 数据结构与场景

String 适合缓存、计数和锁值;Hash 适合对象字段;List 适合简单队列但要注意阻塞与内存;Set 用于去重和集合运算;Sorted Set 用于排行榜和延迟队列;Stream 提供消费组和消息持久化语义。

选择结构要考虑命令复杂度、元素数量、编码变化和访问模式,避免大 key 与 hot key。

## 过期与淘汰

Redis 结合惰性删除和定期扫描处理过期键。内存达到 maxmemory 后按策略淘汰;noeviction 会让写命令失败。缓存必须设置合理 TTL,并加入随机抖动避免同一时刻大量失效。

缓存问题:

- 穿透:查询不存在数据,可用空值缓存、布隆过滤和请求校验。

- 击穿:热点键失效,可用互斥重建、逻辑过期或提前刷新。

- 雪崩:大量键同时失效或实例故障,使用 TTL 抖动、限流、降级和多层缓存。

## RDB 与 AOF

RDB 是时间点快照,恢复快但可能丢失快照后的数据。AOF 记录写操作,数据损失窗口由 fsync 策略决定,文件更大且需要 rewrite。生产可组合使用,但必须通过恢复演练确定真实 RPO/RTO。

## 主从、Sentinel 与 Cluster

复制是异步的。Sentinel 适合非分片主从的监控和故障转移;Cluster 同时提供分片和故障转移。两者都不能替代应用幂等、持久备份和网络分区设计。

## 常用诊断

```bash

redis-cli INFO

redis-cli INFO memory

redis-cli INFO replication

redis-cli INFO stats

redis-cli SLOWLOG GET 20

redis-cli LATENCY DOCTOR

redis-cli --bigkeys

redis-cli --memkeys

```

生产使用 scan,避免 keys * 阻塞大实例。bigkeys 会扫描全库,也应在低峰限速执行。

## 延迟排查

1. 检查 CPU、网络、内存、swap 和持久化 I/O。

2. 查看 slowlog、latency、instantaneous_ops 和 blocked_clients。

3. 排查大 key、热 key、Lua、事务和 O(N) 命令。

4. 检查 AOF rewrite、RDB fork 与写时复制内存。

5. 检查复制积压、网络抖动和客户端连接池。

6. 对比应用端超时与 Redis 服务端耗时。

## 分布式锁

基本锁使用 SET key value NX PX,并用唯一 value 标识持有者;释放时通过 Lua 验证 value 后删除。锁需要处理超时、续期、进程暂停和业务幂等。它不是数据库事务替代品,对强一致要求应采用更合适的协调系统或 fencing token。

## 安全与容量

启用 ACL、最小权限、TLS/私网和 protected mode,关闭公网暴露。监控 used_memory、RSS、碎片率、连接数、拒绝连接、keyspace hit rate、evicted_keys、复制延迟和持久化状态。

面试回答建议采用“机制—限制—生产验证”的结构,而不是给出绝对化结论。

原创

Redis 运维与面试核心:数据结构、过期、持久化、高可用和故障排查

本文链接: Redis 运维与面试核心:数据结构、过期、持久化、高可用和故障排查

本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

评论交流

文章目录