RDB方式的持久化
将redis内存直接把snapshot保存到文件系统。将整个内存数据存放到dump.rdb file 中。配置如下:
[allen@localhost src]$ cd redis-5.0.3
[allen@localhost redis-5.0.3]$ vi redis.conf
配置解释:
在60秒之内有10000条redis写命令
900秒内写一次
300秒内写10次
持久化配置可以配多个策略,只要满足其中一个条件就会触发一次持久化
如下save使用,执行save dump.rdb文件会改变,save命令执行会柱塞redis客户端的命令。
[allen@localhost redis-5.0.3]$ ls -lrt dump.rdb
-rw-rw-r--. 1 allen allen 858 Jan 4 06:02 dump.rdb
[allen@localhost redis-5.0.3]$ src/redis-cli
127.0.0.1:6379> set user:name allen1
OK
127.0.0.1:6379> save
OK
127.0.0.1:6379> pwd
[allen@localhost redis-5.0.3]$ ls -lrt dump.rdb
-rw-rw-r--. 1 allen allen 876 Jan 5 04:57 dump.rdb
bgsave的使用
开启另外一个线程来写内存数据到另外一个副本的dump文件中,同时写期间的的操作也同时写到这个备份的dump文件中。
AOF 持久化
在redis.conf 中将appendonly 改成yes,开启AOF 持久化
appendonly yes
持久化的数据会被写的文中appendonly.aof 中,文件名称可以修改
# The name of the append only file (default: "appendonly.aof")
appendfilename "appendonly.aof"
appendonly的配置策略:
# appendfsync always
appendfsync everysec
# appendfsync no
一般三选一
1. 每执行一条命令,都会马上被持久化到文件中
2. 每1秒中去持久化一次,在故障发生时只会丢一秒的数
3. 不主动发起持久化,由操作系统统一调配
AOF 里面记录了每条命令,恢复数据的时候会把里面的命令全部拿来执行一次,所以数据恢复的时候会非常慢
AOF 也会对命令做了一些优化,把一些重复的命令只留下最后一条,不用保存过程。
AOF命令重写bgrewriteaof
bgrewriteaof 命令是手动重写,即把backup文件中的命令重写,删除些过程的命令,只保留最后结果的命令,如下配置是自动触发重写的命令。
配置如下:
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
配置解释:
aof文件和上次相比增长了100%
aof文件至少大于64m
R
默认开启的是RDB, AOF 需要自己开启,如果2种持久化都开启,2个文件都会帮你做了,生产环境重启了,默认用AOF文件进行恢复,因为AOF数据更全。
混合持久化方式
开启混合持久化方式如下,注意: 开启它之前必须现开启AOF
aof-use-rdb-preamble yes
redis 4.0之后,推出了混合持久化方式,他把RDB,AOF的有点集中起来,简单的说就是在你执行bgrewriteaof或触发自动AOF重写的时候,将AOF文件以RDB文件格式(二进制压缩)写到AOF文件中。而在下次重写之前,依然用aof文件格式追加到上面二进制数据的后面。
这样既可以让数据恢复时和RDB一样快速,又可以和AOF文件一样准确。兼顾了性能和安全性。
用这种方式就可以把RDB方式快照给关掉了。
[allen@localhost redis-5.0.3]$ cat appendonly.aof
REDIS0009 redis-ver5.0.3
redis-bitse used-memè
𮤭preambleÿ'ʵ#ɪ2
$6
SELECT
$1
0
*3
$3
set
$6
Allen2
$11
hello workd
*3
$3
set
$6
Allen3
$11
hello world
在你关掉redis之前会帮你做一次持久化
每次你自己去启动redis的时候就会自动去找aof或rdb文件,自动把里面的数据load到内存中里面去。