Redis 持久化、事务、管道、锁 完整总结
Redis 持久化、事务、管道、锁 完整总结
一、Redis 持久化
作用:将内存中的数据存储到磁盘,防止数据库意外宕机导致数据丢失。
方案:RDB、AOF
二、RDB 持久化
1.概念
每隔一段时间,将内存中的数据作为快照写入磁盘临时文件;恢复时将快照文件读入内存。
2.特点
- 全备,恢复很快
- 数据传输方便,只有 1 个文件
- 数据较多时,生成快照速度较慢
- 故障时可能丢失最后一次备份后的数据
3.配置与操作
-
查看配置
- 存储位置:
/etc/redis.conf中dir /opt/redis-8.6 - 文件名:
dbfilename "dump.rdb" - Redis 内查看:
config get dirconfig get dbfilename
- 存储位置:
-
修改存储位置为 /redisdata
dir /redisdata- 注意:修改后旧数据无法加载,需手动迁移
-
设置快照时间
save 10 2:每 10 秒内有两次修改就备份
-
重启服务
redis-cli -a 12345678 shutdown redis-server /etc/redis.conf -
恢复旧数据
-
停止服务
-
拷贝原目录 dump.rdb 到新目录:
cp /opt/redis-8.6/dump.rdb /redisdata/ -
启动服务即可加载旧数据
-
-
常用命令
save:生成 RDB(阻塞,线上禁止)bgsave:后台生成 RDB(不阻塞)lastsave:查看上次保存时间戳date -d @时间戳:转换为可读时间redis-check-rdb 文件:检查 RDB 是否损坏
-
触发 RDB 条件
- 达到 save 配置规则
- 执行 shutdown
- 手动 save /bgsave
- 主从复制时触发
- 禁用 RDB:
save ""
三、AOF 持久化
1.概念
以日志方式记录用户写操作,追加到 AOF 文件;默认不开启。
Fork 子进程处理新数据,先写缓存再刷盘。
2.配置
save "" # 禁用 RDB
dir /redisdata/
appendonly yes # 开启 AOF
appendfilename "appendonly.aof"
appenddirname "appendonlydir"
appendfsync everysec
3.appendfsync 策略
everysec:每秒同步(默认,最多丢 1s 数据)no:由操作系统控制刷盘always:每次操作都写磁盘(IO 大,不推荐)
4.重启与查看
redis-cli -a 12345678 shutdown
redis-server /etc/redis.conf
cd /redisdata/
ll
ll appendonlydir/
5.误操作 flushdb 恢复步骤
- 执行 flushdb,数据清空
- 停止 Redis 服务
- 编.辑 AOF 增量文件,删除最后
flushdb命令 - 启动服务,数据恢复
6.AOF 重写
作用:AOF 文件过大时进行瘦身,合并冗余命令,节省空间。
四、RDB 和 AOF 对比
- 生成速度:AOF 快,RDB 慢
- 恢复速度:RDB 快,AOF 慢
- 文件大小:RDB 小,AOF 大
- 文件类型:RDB 二进制,AOF 文本可修改
- 数据安全:AOF 丢失更少,RDB 可能丢较多
五、混合持久化
- AOF 与 RDB 可同时开启,AOF 优先级更高
- 重启只加载 AOF,不加载 RDB
- 默认开启混合模式:
aof-use-rdb-preamble yes
六、Redis 事务
1.概念
一组操作集合,不可分割;执行时不被其他命令插队;提交前只入队不执行。
Redis 单线程,事务不支持回滚。
2.与 MySQL 事务区别
MySQL 可回滚;Redis 事务只保证顺序执行,出错不回滚。
3.常用命令
MULTI:开启事务- 命令入队,显示 QUEUED
EXEC:执行事务DISCARD:放弃事务
4.事务出错情况
-
语法错误
(如不存在命令)
→ 整个事务被丢弃,EXEC 报错,全部不执行
-
逻辑错误
(如对字符串 incr)
→ 正确命令执行,错误命令报错,部分成功
七、Redis 管道(PIPE)
1.作用
优化频繁命令往返的网络性能瓶颈,减少 TCP 连接开销。
2.特点
- 一次发送多个命令
- 依次执行,不保证原子性
- 命令不宜过多,避免客户端阻塞
3.使用方式
-
Python 使用
r.pipeline()批量命令- 最后
pipe.execute()
-
Shell 使用
cat cmd.txt | redis-cli -a 12345678 --pipe命令独立执行,各自返回结果。
4.PIPE 与事务区别
管道仅打包发送命令,不保证原子性;事务保证原子性执行。
八、Redis 锁(乐观锁)
1.锁类型
- 悲观锁:MySQL,先加锁再使用
- 乐观锁:Redis,使用
WATCH实现
2.使用步骤
-
WATCH key监控 key -
MULTI开启事务 -
命令入队
-
EXEC执行
- 若执行前其他客户端修改了该 key →
EXEC返回 nil,事务失败 - 未修改则正常执行
- 若执行前其他客户端修改了该 key →
3.取消监控
UNWATCH:取消所有 key 监控

浙公网安备 33010602011771号