深色模式
Redis 安装与持久化
摘要:Redis 是内存数据库,断电即丢,持久化必须显式配置。本文安装 Redis,配置 RDB(定时快照)与 AOF(追加写日志),并说明如何校验备份文件可用。
适用环境
bash
cat /etc/os-release | grep -E '^ID='
mkdir -p /data/redis/{data,log}
df -h /data1
2
3
2
3
操作步骤
1. 安装
bash
# RHEL 系
sudo yum install -y redis
# Debian/Ubuntu
sudo apt-get install -y redis-server
# 或源码编译(需要最新特性时)
# make && make install PREFIX=/usr/local/redis1
2
3
4
5
6
2
3
4
5
6
2. 基础配置(/etc/redis/redis.conf)
ini
bind 127.0.0.1 10.0.1.30 # 不要 bind 0.0.0.0
port 6379
requirepass Str0ngPass!2026
dir /data/redis/data
logfile /data/redis/log/redis.log
maxmemory 4gb1
2
3
4
5
6
2
3
4
5
6
3. 配置 RDB 快照
ini
save 3600 1 300 100 60 10000 # 3600秒1次改动/300秒100次/60秒10000次 任一满足即快照
dbfilename dump.rdb
stop-writes-on-bgsave-error yes
rdbcompression yes1
2
3
4
2
3
4
bash
redis-cli -a 'Str0ngPass!2026' BGSAVE # 手动触发后台快照
redis-cli -a 'Str0ngPass!2026' LASTSAVE # 返回 Unix 时间戳1
2
2
4. 配置 AOF(更高安全性)
ini
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec # 每秒刷盘;always 最安全但慢,no 由 OS 决定
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb1
2
3
4
5
2
3
4
5
bash
redis-cli -a 'Str0ngPass!2026' BGREWRITEAOF # 手动重写,压缩 AOF 体积
redis-cli -a 'Str0ngPass!2026' INFO persistence1
2
2
危险
生产环境不要给 Redis 设置空密码并暴露公网,未授权访问可在几分钟内被植入挖矿脚本或清空数据(FLUSHALL)。务必设置 requirepass 并限制来源 IP。
5. 选择策略
| 场景 | 建议 |
|---|---|
| 纯缓存,可重建 | RDB 即可,甚至只保留 AOF 关闭 |
| 缓存但重建代价高 | RDB + AOF 同时开启 |
| 有持久化语义(队列、计数器) | AOF appendfsync everysec + 主从副本 |
6. 启动与开机自启
bash
sudo systemctl enable --now redis
sudo systemctl status redis1
2
2
验证
bash
redis-cli -a 'Str0ngPass!2026' PING # PONG
redis-cli -a 'Str0ngPass!2026' SET probe hello
redis-cli -a 'Str0ngPass!2026' GET probe
redis-cli -a 'Str0ngPass!2026' INFO persistence | grep -E 'rdb_bgsave_in_progress|aof_enabled|aof_last_bgrewrite_status'
ls -lh /data/redis/data/
redis-check-rdb /data/redis/data/dump.rdb # 校验 RDB 文件完整性1
2
3
4
5
6
2
3
4
5
6
常见坑
WARNING
开启 AOF 后重启,Redis 优先用 AOF 恢复数据;若 AOF 文件损坏会启动失败,可用 redis-check-aof --fix 修复(会截断末尾损坏记录)。
WARNING
BGSAVE 在内存写密集时会 fork 子进程,瞬间内存占用可能翻倍;需保证有足够空闲内存或开启 vm.overcommit_memory=1。
DANGER
FLUSHALL/FLUSHDB 会立刻清空数据且无事务回滚;建议用 rename-command 重命名或禁用高危命令。