Redis 生产环境部署与持久化配置:从安装到哨兵模式
Redis 是互联网应用最常用的缓存和数据结构服务。然而很多开发者用 Redis 只会 GET/SET,对其持久化机制、内存管理、高可用方案了解甚少。本文从原理到实战,帮你在生产环境中正确部署和配置 Redis。
一、Redis 安装(最新稳定版)
# Ubuntu/Debian(推荐使用官方仓库) curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list sudo apt update && sudo apt install redis # CentOS / Rocky Linux sudo yum install redis # 验证 redis-cli ping # 返回 PONG 说明安装成功 redis-cli INFO server | grep redis_version
二、生产环境核心配置(redis.conf)
# 1. 绑定地址(生产环境切勿绑定 0.0.0.0!) bind 127.0.0.1 192.168.1.10 # 只监听本机和内网 IP # 2. 设置密码(必须!) requirepass YourStrongPassword@2026 # 3. 内存限制与淘汰策略 maxmemory 2gb # 淘汰策略选择(缓存场景推荐 allkeys-lru): # noeviction:内存满了返回错误(适合数据库场景) # allkeys-lru:LRU 淘汰所有 key(适合缓存场景) # volatile-lru:只 LRU 淘汰有过期时间的 key maxmemory-policy allkeys-lru # 4. 慢查询日志(排查性能问题) slowlog-log-slower-than 10000 # 超过 10ms 的命令记录到慢日志 slowlog-max-len 128 # 5. 关闭危险命令(防止误操作或攻击) rename-command FLUSHALL "" # 禁用 FLUSHALL rename-command DEBUG "" # 禁用 DEBUG rename-command CONFIG "CONFIG_SECRET_NAME" # 重命名 CONFIG
三、持久化机制对比
RDB(快照持久化)
在指定条件下,将内存数据 fork 子进程写入 .rdb 文件:
# redis.conf 中的 RDB 触发条件 save 900 1 # 900 秒内至少 1 次写操作 → 触发保存 save 300 10 # 300 秒内至少 10 次写操作 save 60 10000 # 60 秒内至少 10000 次写操作 save "" # 禁用 RDB dbfilename dump.rdb dir /var/lib/redis
优点:文件小、启动快、适合定期备份;缺点:两次快照之间的数据可能丢失(最多丢失几分钟数据)。
AOF(追加日志持久化)
将每条写命令追加到 .aof 文件,宕机后重放日志恢复数据:
appendonly yes appendfilename "appendonly.aof" # 刷盘策略: # always:每次写命令都刷盘 → 最安全,性能最差 # everysec(推荐):每秒刷盘,最多丢1秒数据 # no:由 OS 决定何时刷盘 → 性能最好,可能丢更多数据 appendfsync everysec # AOF 重写:定期压缩 AOF 文件 auto-aof-rewrite-percentage 100 # 文件增长 100% 时触发重写 auto-aof-rewrite-min-size 64mb # 文件至少 64MB 才触发重写
混合持久化(Redis 4.0+,推荐)
aof-use-rdb-preamble yes # AOF 文件头包含 RDB 快照,后面跟增量 AOF # 兼顾 RDB 的快速加载 + AOF 的数据完整性
四、Redis 哨兵模式(Sentinel)高可用
哨兵模式用于单主节点的高可用:
# 架构:1主 + 2从 + 3哨兵(哨兵至少3个,奇数,保证投票决策) Master(192.168.1.10:6379) ├── Slave1(192.168.1.11:6379) └── Slave2(192.168.1.12:6379) Sentinel1(192.168.1.10:26379) Sentinel2(192.168.1.11:26379) Sentinel3(192.168.1.12:26379)
# sentinel.conf(三台机器配置相同) port 26379 sentinel monitor mymaster 192.168.1.10 6379 2 # 需要 2 个哨兵同意才故障转移 sentinel auth-pass mymaster YourStrongPassword@2026 sentinel down-after-milliseconds mymaster 5000 # 5秒无响应判为下线 sentinel failover-timeout mymaster 60000 # 60秒内完成故障转移 # 启动哨兵 redis-sentinel /etc/redis/sentinel.conf
五、Redis 内存分析与优化
# 查看内存使用详情 redis-cli INFO memory # 分析大 key(危险操作,生产环境用 --bigkeys 替代) redis-cli --bigkeys # 扫描各数据类型最大 key,不阻塞 # 查看 key 数量和过期情况 redis-cli INFO keyspace # 慢查询日志 redis-cli SLOWLOG GET 10 # 查看最近10条慢查询 redis-cli SLOWLOG RESET # 清空慢查询日志
六、Redis 安全加固
- 绑定内网 IP,不对公网暴露 6379 端口
- 设置强密码(requirepass)
- 禁用/重命名危险命令(FLUSHALL、CONFIG、DEBUG)
- 防火墙只允许应用服务器 IP 访问 Redis
- Redis 6.0+ 支持 ACL 多用户权限控制,生产环境推荐启用
总结
生产环境部署 Redis,安全配置(绑定 IP + 密码 + 命令限制)是基础,混合持久化是数据安全的最佳选择,哨兵模式是单机→高可用的第一步。了解内存淘汰策略,根据业务选择缓存还是数据库模式,是用好 Redis 的关键。
