Redis--数据备份与恢复

版权声明:杨福东 https://blog.csdn.net/qq_31120741/article/details/82219812

####持久化

RDB方式(默认)
RDB方式的持久化是通过快照(snapshotting)完成的,当符合一定条件时Redis会自动将内存中的所有数据进行快照并存储在硬盘上。进行快照的条件可以由用户在配置文件中自定义,由两个参数构成:时间和改动的键的个数。当在指定的时间内被更改的键的个数大于指定的数值时就会进行快照。Redis默认会将快照文件存储在当前目录(可CONFIG GET dir来查看)的dump.rdb文件中,可以通过配置dir和dbfilename两个参数分别指定快照文件的存储路径和文件名。RDB是Redis默认采用的持久化方式,在配置文件中已经预置了3个条件:

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

可以存在多个条件,条件之间是“或”的关系,只要满足其中一个条件,就会进行快照。 如果想要禁用自动快照,只需要将所有的save参数删除即可。

AOF方式
默认情况下Redis没有开启AOF(append only file)方式的持久化,可以在redis.conf中通过appendonly参数开启:

appendonly yes

在启动时Redis会逐个执行AOF文件中的命令来将硬盘中的数据载入到内存中,载入的速度相较RDB会慢一些。开启AOF持久化后每执行一条会更改Redis中的数据的命令,Redis就会将该命令写入硬盘中的AOF文件。AOF文件的保存位置和RDB文件的位置相同,都是通过dir参数设置的,默认的文件名是appendonly.aof,可以通过appendfilename参数修改:

appendfilename appendonly.aof

配置redis自动重写AOF文件的条件

命令 说明
auto-aof-rewrite-percentage 100 当目前的AOF文件大小超过上一次重写时的AOF文件大小的百分之多少时会再次进行重写,如果之前没有重写过,则以启动时的AOF文件大小为依据
auto-aof-rewrite-min-size 64mb 允许重写的最小AOF文件大小配置写入AOF文件后,要求系统刷新硬盘缓存的机制
appendfsync always 每次执行写入都会执行同步,最安全也最慢
appendfsync everysec 每秒执行一次同步操作
appendfsync no 不主动进行同步操作,而是完全交由操作系统来做(即每30秒一次),最快也最不安全

Redis允许同时开启AOF和RDB,既保证了数据安全又使得进行备份等操作十分容易。此时重新启动Redis后Redis会使用AOF文件来恢复数据,因为AOF方式的持久化可能丢失的数据更少。

主从复制
通过持久化功能,Redis保证了即使在服务器重启的情况下也不会损失(或少量损失)数据。但是由于数据是存储在一台服务器上的,如果这台服务器的硬盘出现故障,也会导致数据丢失。为了避免单点故障,我们希望将数据库复制多个副本以部署在不同的服务器上,即使有一台服务器出现故障其他服务器依然可以继续提供服务。这就要求当一台服务器上的数据库更新后,可以自动将更新的数据同步到其他服务器上,Redis提供了复制(replication)功能可以自动实现同步的过程。

配置方法
通过命令行参数 启动redis-server的时候,使用命令行参数–slaveof master-ip master port

redis-server --port 6380 --slaveof 127.0.0.1 6379

通过命令SLAVEOF master-ip master-port

redis>SLAVEOF 127.0.0.1 6379

####恢复
如果需要恢复数据,只需将备份文件 (dump.rdb或者appendonly.aof) 移动到 redis dir目录并启动服务即可。获取 redis 目录可以使用 CONFIG 命令,如下所示:

127.0.0.1:6381> CONFIG GET dir
1) "dir"
2) "/data/redis/redis6381"
127.0.0.1:6381> CONFIG GET dbfilename
1) "dbfilename"
2) "dump6381.rdb"

注意:

  1. 当启动参数文件启用appendonly时,redis默认寻找appendonly.aof恢复数据,如果没有aof文件,则redis数据为空
  1. 当需要使用rdb文件恢复数据时,启动参数文件需注释掉 #appendonly yes

猜你喜欢

转载自blog.csdn.net/qq_31120741/article/details/82219812