Redis持久化RDB/AOF

持久化RDB

Redis数据库文件--Redis DataBase

数据持久化方式之一,术语称为Snapshot快照

按照指定时间间隔,将内存中的数据集快照写入硬盘,恢复时,将快照文件直接读入内存

优点 缺点

高性能的持久化实现

—创建一个子进程来执行持久化,先把数据写入临时文件,持久化过程结束后,再用临时文件替换上次持久化的文件;在持久化过程中主进程不做任何IO操作

适合大规模数据恢复,且对数据完整性要求不是非常高的场合

意外宕机时,最后一次持久化的数据会丢失

由于RDB是通过fork子进程来协助完成数据持久化工作的,因此,如果当数据集较大时,可能会导致整个服务器停止服务几百毫秒,甚至是1秒钟。

相关配置参数 (配置文件内)

文件名  dbfilename  “dump.rdb”    默认存放在/var/lib/redis/6379/dump.rdb

阻塞写存盘      save   

不阻塞写存盘  bgsave

[root@redis50 6379]# vim /etc/redis/6379.conf 
...
############### SNAPSHOTTING  ########
 217 #   save ""                            //带有#为启用RDB
 218 
 219 save 900 1                             //900s内且有1次修改自动保存到硬盘
 220 save 300 10                            //300s内10次
 221 save 60 10000                          //60s内10000次
 //三个满足一个即可
...
 236 stop-writes-on-bgsave-error yes        //bgsave出错时停止写操作
...
 242 rdbcompression yes                     //压缩
...
 251 rdbchecksum yes                        //在存储快照后,使用crc16算法做数据校验
...
 254 dbfilename dump.rdb

使用RDB文件恢复数据

1.备份数据    cp   数据库目录/dump.rdb       备份目录

2.恢复数据    cp   备份目录/dump.rdb     数据库目录    

3.重启redis服务   /etc/redis/redis_端口  start

[root@redis50 ~]# redis-cli -h 192.168.4.50 -p 6350
192.168.4.50:6350> auth 123456
OK
192.168.4.50:6350> keys *
1) "link50"
2) "test"
3) "xin"
192.168.4.50:6350> shutdown
[root@redis50 ~]# cd /var/lib/redis/6379/
[root@redis50 6379]# cp  dump.rdb  dump.rdb.bak
[root@redis50 6379]# /etc/init.d/redis_6379 start 
[root@redis50 ~]# redis-cli -h 192.168.4.50 -p 6350  -a 123456
192.168.4.50:6350> flushall
192.168.4.50:6350> keys *
(empty list or set)
192.168.4.50:6350> shutdown
[root@redis50 6379]# rm -rf dump.rdb
[root@redis50 6379]# mv dump.rdb.bak  dump.rdb
[root@redis50 6379]# /etc/init.d/redis_6379 start 
[root@redis50 ~]# redis-cli -h 192.168.4.50 -p 6350  -a 123456
192.168.4.50:6350> keys *
1) "link50"
2) "test"
3) "xin"
 

持久化之AOF

只做追加操作的文件,Append Only File

不断的将新的操作追加到文件的末尾,使用cat命令可以查看文件内容

优点 缺点

出现意外宕机时,仅可能丢失1秒的数据

可以灵活设置持久化方式:

同步持久化appendfsync always

异步持久化appendfsync everysec

体积通常会大于RDB方式

执行fsync策略时的速度可能会比RDB方式慢

相关文件和参数

[root@redis50 6379]# vim /etc/redis/6379.conf 
 
 673 appendonly yes                        //启用aof 默认为no
 677 appendfilename "appendonly.aof"       //指定文件名 默认路径/var/lib//redis/6379/appendonly.aof
 702 # appendfsync always                  //有新写操作立即记录
 703 appendfsync everysec                  //每秒记录一次
 704 # appendfsync no                      //不同步到dump.rdb,只记录到appendonly.aof
 744 auto-aof-rewrite-percentage 100       
 745 auto-aof-rewrite-min-size 64mb
//默认配置当aof文件是上次rewite后大小的1倍且文件大于64M时触发

使用AOF文件恢复数据

备份数据:cp 数据库目录/appendonly.aof  备份目录

恢复数据:cp 备份目录/appendonly.aof     数据库目录/   重启服务

注:企业一般是同时使用这两种持久化方式,不过AOF模式要优先于RDB模式,Redis会先读取AOF文件!

[root@redis50 6379]# vim /etc/redis/6379.conf
...
 673 appendonly yes
...
 677 appendfilename "appendonly.aof"
[root@redis50 6379]# /etc/init.d/redis_6379 restart 
[root@redis50 6379]# redis-cli -h 192.168.4.50 -p 6350 -a 123456
192.168.4.50:6350> keys *
(empty list or set)
192.168.4.50:6350> set v1 123
OK
192.168.4.50:6350> set v2 456
OK
192.168.4.50:6350> set v3 789
OK
192.168.4.50:6350> keys *
1) "v2"
2) "v3"
3) "v1"
192.168.4.50:6350> exit
[root@redis50 6379]# ls
appendonly.aof  dump.rdb
[root@redis50 6379]# cat appendonly.aof 
*2
$6
SELECT
$1
0
*3
$3
...
set
$2
v3
$3
789
[root@redis50 6379]# cp appendonly.aof  appendonly.aof.bak
[root@redis50 6379]# redis-cli -h 192.168.4.50 -p 6350 -a 123456
192.168.4.50:6350> FLUSHALL 
OK
192.168.4.50:6350> keys *
(empty list or set)
192.168.4.50:6350> shutdown
[root@redis50 6379]# rm -rf appendonly.aof
[root@redis50 6379]# mv appendonly.aof.bak  appendonly.aof
[root@redis50 6379]# /etc/init.d/redis_6379 start
[root@redis50 6379]# redis-cli -h 192.168.4.50 -p 6350 -a 123456
192.168.4.50:6350> keys *
1) "v2"
2) "v3"
3) "v1"

猜你喜欢

转载自blog.csdn.net/weixin_43800781/article/details/85233163