Redis 基础回顾:核心数据结构、持久化机制与单机部署
在深入哨兵模式高可用架构之前,必须牢固掌握 Redis 的基础能力。本章将系统梳理 Redis 的五大核心数据结构、两种持久化机制(RDB / AOF)以及标准单机部署流程,为后续的哨兵集群搭建与故障转移验证打下坚实基础。
2.1 五大核心数据结构
Redis 是一个键值对内存数据库,其“值”支持多种数据结构。理解这些结构的底层实现与适用场景,是正确设计缓存模型的前提。
| 数据结构 | 底层编码(主要) | 典型命令 | 适用场景 |
|---|---|---|---|
| String | int / embstr / raw | SET / GET / INCR / MSET | 计数器、分布式锁、Session 缓存 |
| Hash | ziplist / hashtable | HSET / HGET / HGETALL / HINCRBY | 对象存储(用户信息、商品详情) |
| List | quicklist | LPUSH / RPUSH / LPOP / BRPOP | 消息队列、时间线、最新列表 |
| Set | intset / hashtable | SADD / SMEMBERS / SINTER / SUNION | 标签系统、去重、共同好友 |
| Sorted Set | ziplist / skiplist + dict | ZADD / ZRANGE / ZREVRANGE / ZSCORE | 排行榜、延迟队列、限流滑动窗口 |
SRE 避坑提示: 使用
KEYS * 命令会阻塞单线程 Redis 实例,生产环境严禁使用。应改用 SCAN 系列命令进行渐进式遍历。
2.2 持久化机制:RDB 与 AOF
Redis 是内存数据库,但通过持久化机制将数据写入磁盘,确保重启后数据可恢复。生产环境通常根据数据安全等级选择 RDB、AOF 或两者混合。
2.2.1 RDB(快照持久化)
- 原理: 按时间间隔生成全量二进制快照文件(dump.rdb)。
- 触发方式: 手动
SAVE(同步阻塞)、BGSAVE(fork 子进程异步写)、自动配置(如save 900 1)。 - 优点: 文件紧凑,恢复速度快,适合全量备份与灾难恢复。
- 缺点: 可能丢失两次快照间的数据;fork 子进程在内存量大时可能造成毫秒级卡顿。
2.2.2 AOF(追加文件持久化)
- 原理: 将每次写操作以 Redis 协议格式追加到 appendonly.aof 文件。
- 刷盘策略:
always:每次写操作都 fsync,最安全但性能最差。everysec:每秒 fsync,兼顾性能与安全(生产推荐)。no:由操作系统决定刷盘,性能最好但丢失风险最大。
- 优点: 数据丢失少(最多 1 秒数据),可读性好。
- 缺点: 文件体积大,恢复速度慢于 RDB。
2.2.3 混合持久化(Redis 4.0+)
结合 RDB 与 AOF 的优点:AOF 重写时直接将当前内存数据生成为 RDB 格式写入 AOF 文件头部,后续增量写操作继续以 AOF 格式追加。重启时先加载 RDB 部分再回放增量 AOF,兼顾快速恢复与低数据丢失。
生产配置建议: 开启混合持久化(
aof-use-rdb-preamble yes),AOF 刷盘策略设为 everysec,同时保留 RDB 作为定时备份。
2.3 单机部署与基础配置
哨兵模式基于主从复制,而主从复制又依赖单机实例的正确配置。以下演示在 Linux 环境下的标准单机部署步骤。
2.3.1 安装与启动
# 下载并编译(以 Redis 7.2 为例)
wget https://download.redis.io/releases/redis-7.2.4.tar.gz
tar xzf redis-7.2.4.tar.gz
cd redis-7.2.4
make -j$(nproc)
# 复制二进制与配置文件
sudo cp src/redis-server src/redis-cli /usr/local/bin/
sudo cp redis.conf /etc/redis/6379.conf
# 启动实例
redis-server /etc/redis/6379.conf
2.3.2 核心配置项(redis.conf)
| 配置项 | 推荐值 | 说明 |
|---|---|---|
daemonize |
yes | 后台守护进程运行 |
port |
6379 | 监听端口 |
bind |
0.0.0.0 | 生产环境应绑定内网 IP |
requirepass |
your_strong_password | 设置访问密码 |
save |
save 900 1 / save 300 10 / save 60 10000 | RDB 自动触发策略 |
appendonly |
yes | 开启 AOF |
appendfsync |
everysec | AOF 刷盘策略 |
maxmemory |
80% 物理内存 | 避免 OOM,需配合淘汰策略 |
maxmemory-policy |
allkeys-lru | 缓存场景常用淘汰策略 |
安全警告: 生产环境务必设置
requirepass,并禁用 CONFIG SET 远程修改(rename-command CONFIG ""),防止配置被恶意篡改。
2.3.3 验证单机实例
# 连接 Redis
redis-cli -h 127.0.0.1 -p 6379 -a your_password
# 基础操作验证
127.0.0.1:6379> PING
PONG
127.0.0.1:6379> SET course "Redis Sentinel"
OK
127.0.0.1:6379> GET course
"Redis Sentinel"
# 查看持久化状态
127.0.0.1:6379> INFO persistence
# Persistence
loading:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1700000000
aof_enabled:1
aof_rewrite_in_progress:0
2.4 本章小结
- 数据结构: 掌握 String、Hash、List、Set、Sorted Set 的底层编码与命令,是设计缓存 key 的基础。
- 持久化: RDB 适合备份与快速恢复,AOF 适合低数据丢失场景,混合持久化是生产环境的最佳实践。
- 单机部署: 正确配置
requirepass、maxmemory、appendfsync等参数,是后续搭建主从与哨兵集群的前提。