Redis-备份

1、概念

Redis所有数据都是保存在内存中,Redis数据备份可以定期的通过异步方式保存到磁盘上,该方式称为半持久化模式,如果每一次数据变化都写入aof文件里面,则称为全持久化模式。同时还可以基于Redis 主从复制实现Redis备份与恢复。即以下三种备份模式:

半持久化rdb模式
全持久化aof模式
redis主从复制

2、三种备份模式解读

2.1 半持久化RDB模式

半持久化RDB模式是Redis备份默认方式,是通过快照(snapshotting)完成的,当符合在Redis.conf 配置文件中设置的条件时Redis会自动将内存中的所有数据进行快照并存储在硬盘上,完成数据备份。 Redis启动后会读取RDB快照文件,将数据从硬盘载入到内存,根据数据量大小与结构和服务器性能不同,通常将一个记录一千万个字符串类型键、大小为1GB的快照文件载入到内存中需花费20~30秒钟。

2.1.1 rdb持久化实现过程

Redis实现快照的过程,Redis使用fork函数复制(写时复制)一份当前进程(父进程)的副本(子进程),父进程继续接收并处理客户端发来的命令,而子进程开始将内存中的数据写入硬盘中的临时文件,当子进程写入完所有数据后会用该临时文件替换旧的RDB文件,至此一次快照操作完成。

2.1.2 开启rdb持久化

Redis进行RDB快照的条件由用户在配置文件中自定义,由两个参数构成:时间和改动的键的个数。当在指定的时间内被更改的键的个数大于指定的数值时就会进行快照。在配置文件中已经预置了3个条件:

save        900     1         #900秒内有至少1个键被更改则进行快照; 
save        300     10        #300秒内有至少10个键被更改则进行快照; 
save        60      10000     #60秒内有至少10000个键被更改则进行快照

默认可以存在多个条件,条件之间是“或”的关系,只要满足其中一个条件,就会进行快照。

2.1.3 禁用rdb持久化

如果想要禁用自动快照,只需要将所有的save参数删除(注释)即可。

2.1.4 rdb数据文件路径

Redis默认会将快照文件存储在Redis数据目录,默认文件名为:dump.rdb文件,可以通过配置dir和dbfilename两个参数分别指定快照文件的存储路径和文件名。也可以在Redis命令行执行 config get dir 获取Redis数据保存路径。
RDB文件是经过压缩(可以配置rdbcompression参数以禁用压缩节省CPU占用)的二进制格式,所以占用的空间会小于内存中的数据大小,更加利于传输。
除了自动快照,还可以手动发送SAVE和BGSAVE命令让Redis执行快照,两个命令的区别在于:
save是由主进程进行快照操作,会阻塞住其他请求。
bgsave是通过fork子进程进行快照操作。

2.1.5 rdb持久化常用参数

# 可以从下往上去看,即使只有一个键发生变化,最后也会执行900秒的规则。
save 900 1      900秒内有1个键发生变化开始快照 
save 300 10     300秒内有10个键发生变化开始快照 
save 60 10000   60秒内有10000个键发生变化开始快照 

#后台存储发生故障时,客户端停止写入 
stop-writes-on-bgsave-error yes
#在存储过程中,启动压缩 
rdbcompression yes
#启动redis时,是否检查rdb数据库的完整性 
rdbchecksum yes
#rdb数据库的名字,可自定义 
dbfilename dump.rdb
#rdb数据库存放路径,可以自定义 
dir /var/lib/redis

2.2 全持久化AOF模式

如果数据很重要无法承受任何损失,可以考虑使用AOF方式进行持久化,默认Redis没有开启 AOF(append only file)方式的全持久化模式。

2.2.1 aof持久化实现过程

开启AOF持久化后每执行一条会更改Redis中的数据的命令,Redis就会将该命令写入硬盘中的AOF文件。
在启动时Redis会逐个执行AOF文件中的命令来将硬盘中的数据载入到内存中,载入的速度相较RDB会慢一些。

2.2.2 开启aof持久化

redis默认是没有开启全持久化的,需要在配置文件修改参数实现:

#开启aof持久化,默认为禁止no 
appendonly yes

2.2.3 aof数据文件路径

AOF文件的保存位置和RDB文件的位置相同,都是通过dir参数设置的,默认的文件名是 appendonly.aof,可以通过appendfilename参数修改该名称。
Redis允许同时开启AOF和RDB,既保证了数据安全又使得进行备份等操作十分容易。

2.2.4 aof持久化常用参数

#开启aof持久化,默认为禁止no 
appendonly yes
#指定aof文件名,可自定义 
appendfilename "appendonly.aof"
#每执行一条命令即写入磁盘
#appendfsync always
#每秒同步内存数据到磁盘 
appendfsync everysec
#设置为no,让写入动作交由操作系统完成,同步的频率会相对比较低,不建议 
# appendfsync no
#在rdb写磁盘过程中,是否需要停止aof,默认是不停,如果负载较高,建议停止。这个时候数据也不会丢失,会暂时存在内存队列,rdb数据写完后,aof继续。 
no-appendfsync-on-rewrite no
#aof文件大小相比上次文件大小,增长100%时,重写 
auto-aof-rewrite-percentage 100
#aof文件至少超过64M时,重写 
auto-aof-rewrite-min-size 64mb 
aof-load-truncated yes
发布了34 篇原创文章 · 获赞 1 · 访问量 507

猜你喜欢

转载自blog.csdn.net/weixin_42440154/article/details/103880394