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 作为定时备份。
Redis 持久化机制对比:RDB vs AOF vs 混合 Redis 持久化机制对比流程图 Redis 内存实例 RDB 快照 BGSAVE / SAVE dump.rdb AOF 追加 everysec / always appendonly.aof 混合持久化 RDB + AOF 增量 混合 .aof 文件 重启恢复速度:RDB > 混合 > AOF 数据安全等级:AOF(always) > 混合 > 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
Redis 单机部署架构与核心组件 Redis 单机部署架构与核心组件 Redis Server 端口 6379 | PID 进程 RDB 持久化 AOF 持久化 内存数据结构 dump.rdb appendonly.aof 客户端连接

2.4 本章小结

  • 数据结构: 掌握 String、Hash、List、Set、Sorted Set 的底层编码与命令,是设计缓存 key 的基础。
  • 持久化: RDB 适合备份与快速恢复,AOF 适合低数据丢失场景,混合持久化是生产环境的最佳实践。
  • 单机部署: 正确配置 requirepass、maxmemory、appendfsync 等参数,是后续搭建主从与哨兵集群的前提。