Redis持久化
2023-03-17 本文已影响0人
技术老男孩
一、实现方式:
实现方式有2种:分别是 RDB文件 和 AOF文件
-
RDB文件(存储数据)
指定就是数据库目录下的 dump.rdb 文件
redis运行服务后,会根据配置文件的设置的存盘频率 把内存里的数据复制到数据库目录下的dump.rdb文件里(覆盖保存) -
AOF文件(存储命令)
redis服务AOF文件(与mysql服务的binlog日志文件的功能相同)
是一个文件,记录连接redis服务后执行的写操作命令并且是以追加的方式记录写操作命令
默认没有开启,使用需要人为启用。
二、RDB文件的使用
- 查看 redis服务存储数据到硬盘的存盘频率
vim /etc/redis/6379.conf (默认 219行 220行 221行)
# 以下的值可以根据需求进行修改
# save 秒 变量的个数
save 900 1 # 每15分钟有1个变量改变则存盘
save 300 10 # 每5分钟有10个变量改变则存盘
save 60 10000 # 每1分钟有10000个变量改变则存盘
- 使用RDB文件还可以实现数据的备份和恢复
# 拷贝 dump.rdb 文件就是对数据的备份
[root@host56 ~]# cp /var/lib/redis/6379/dump.rdb /opt/
[root@host56 ~]# ls /opt/*.rdb
/opt/dump.rdb
# 模拟数据丢失
192.168.88.56:6379> FLUSHALL
OK
192.168.88.56:6379> keys *
(empty list or set)
# 把备份的dump.rdb文件再次拷贝回数据库目录就是恢复
# 停止内存没有数据的redis服务
[root@host56 ~]# redis-cli -h 192.168.88.56 -p 6379 shutdown
# 把没有数据的dump.rdb文件删除
[root@host56 ~]# rm -rf /var/lib/redis/6379/dump.rdb
# 把备份dump.rdb文件拷贝到数据库目录下
[root@host56 ~]# cp /opt/dump.rdb /var/lib/redis/6379/
# 启动redis服务 并连接服务查看数据
[root@host56 ~]# /etc/init.d/redis_6379 start
Starting Redis server...
[root@host56 ~]# redis-cli -h 192.168.88.56 -p 6379
192.168.88.56:6379> keys *
1) "i"
2) "d"
3) "x"
- RDB方式的优缺点:
优缺点 | 说明 |
---|---|
优点 | 高性能的持久化实现 —— 创建一个子进程来执行持久化 先将数据写入临时文件,持久化过程结束后, 再用这个临时文件替换上次持久化好的文件 |
过程中主进程不做任何IO操作 比较适合大规模数据恢复 且对数据完整性要求不是非常高的场合 |
|
缺点 | 意外宕机时,丢失最后一次持久化的所有数据 |
三、AOF文件的使用:
- 实现数据的备份和恢复
# 备份aof文件
[root@host56 ~]# cp /var/lib/redis/6379/appendonly.aof /opt/
[root@host56 ~]# ls /opt/*.aof
/opt/appendonly.aof
# 模拟数据丢失
[root@host56 ~]# redis-cli -h 192.168.88.56 -p 6379
192.168.88.56:6379> flushall
192.168.88.56:6379> exit
# 恢复数据
# 把没有数据的服务停止
[root@host56 ~]# redis-cli -h 192.168.88.56 -p 6379 shutdown
# 删除没有数据的aof文件和rdb文件
[root@host56 ~]# rm -rf /var/lib/redis/6379/*
# 把备份的aof文件拷贝到数据库目录
[root@host56 ~]# cp /opt/appendonly.aof /var/lib/redis/6379/
# 启动redis服务并查看数据
[root@host56 ~]# /etc/init.d/redis_6379 start
Starting Redis server...
[root@host56 ~]# redis-cli -h 192.168.88.56 -p 6379
192.168.88.56:6379> keys *
1) "v4"
2) "v3"
- 修复有问题的aof文件
[root@host56 ~]# redis-check-aof --fix /var/lib/redis/6379/appendonly.aof
0x 78: Expected prefix '*', got: 'd'
AOF analyzed: size=126, ok_up_to=120, diff=6
This will shrink the AOF from 126 bytes, with 6 bytes, to 120 bytes
Continue? [y/N]: y 同意修复
Successfully truncated AOF
- 与aof 相关的配置项 ( vim /etc/redis/6379.conf )
参数 | 说明 |
---|---|
appendfsync always** | 时时记录,并完成磁盘同步 安全性较高,内存消耗过大 |
appendfsync everysec | 每秒记录一次,并完成磁盘同步 推荐策略 |
appendfsync no | 写入aof ,不执行磁盘同步 |
- AOF文件的优缺点:
优缺点 | 说明 |
---|---|
优点 | 可以灵活设置持久化方式 |
出现意外宕机时,仅可能丢失1秒的数据 | |
缺点 | 持久化文件的体积通常会大于RDB方式 |
执行fsync策略时的速度可比RDB方式慢 |