持久化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"