Redis数据备份与恢复

来源:互联网 发布:淘宝卖家发快递3元包邮 编辑:程序博客网 时间:2024/06/06 00:59

Redis数据备份与恢复

一、RDB方式(默认)

1.RDB方式的持久化是通过快照(snapshotting)完成的,当符合一定条件时Redis会自动将内存中的所有数据进行快照并存储在硬盘上。
2.进行快照的条件可以由用户在配置文件中自定义,由两个参数构成:时间和改动的键的个数。
3.当在指定的时间内被更改的键的个数大于指定的数值时就会进行快照。RDB是Redis默认采用的持久化方式。

列:在配置文件中已经预置了3个条件

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

4.可以存在多个条件,条件之间是“或”的关系,只要满足其中一个条件,就会进行快照。 如果想要禁用自动快照,只需要将所有的save参数删除即可。
5.Redis默认会将快照文件存储在当前目录(可CONFIG GET dir来查看)的dump.rdb文件中,可以通过配置dir和dbfilename两个参数分别指定快照文件的存储路径和文件名。 

二、Redis实现快照的过程
1.Redis使用fork函数复制一份当前进程(父进程)的副本(子进程);
2.父进程继续接收并处理客户端发来的命令,而子进程开始将内存中的数据写入硬盘中的临时文件;

3.当子进程写入完所有数据后会用该临时文件替换旧的RDB文件,至此一次快照操作完成。


三、手动发送SAVE或BGSAVE命令让Redis执行快照

1.两个命令的区别在于:SAVE是由主进程进行快照操作,会阻塞住其他请求,BGSAVE会通过fork子进程进行快照操作。
2.Redis启动后会读取RDB快照文件,将数据从硬盘载入到内存。根据数据量大小与结构和服务器性能不同,这个时间也不同。
3.通常将一个记录一千万个字符串类型键、大小为1GB的快照文件载入到内 存中需要花费20~30秒钟。 
4.通过RDB方式实现持久化,一旦Redis异常退出,就会丢失最后一次快照以后更改的所有数据。

5.这就需要开发者根据具体的应用场合,通过组合设置自动快照条件的方式来将可能发生的数据损失控制在能够接受的范围。


四、AOF方式(如果数据很重要以至于无法承受任何损失,则可以考虑使用AOF方式进行持久化。)

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

2.AOF文件的保存位置和RDB文件的位置相同,都是通过dir参数设置的,默认的文件名是appendonly.aof,可以通过appendfilename参数修改:

auto-aof-rewrite-percentage 100  #当目前的AOF文件大小超过上一次重写时的AOF文件大小的百分之多少时会再次进行重写,

#如果之前没有重写过,则以启动时的AOF文件大小为依据

auto-aof-rewrite-min-size 64mb   # 写入64mb就会备份。

3.配置写入AOF文件后,要求系统刷新硬盘缓存的机制

# appendfsync always   # 每次执行写入都会执行同步,最安全也最慢

appendfsync everysec   # 每秒执行一次同步操作

# no       # 不主动进行同步操作,而是完全交由操作系统来做(即每30秒一次),最快也最不安全

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


五、Redis复制
如果这台服务器的硬盘出现故障,也会导致数据丢失。为了避免单点故障,我们希望将数据库复制多个副本以部署在不同的服务器上,即使有一台服务器出现故障其他服务器依然可以继续提供服务。这就要求当一台服务器上的数据库更新后,可以自动将更新的数据同步到其他服务器上,Redis提供了复制(replication)功能可以自动实现同步的过程。优点及应用场景

1.优点:
通过复制可以实现读写分离以提高服务器的负载能力。在常见的场景中,读的频率大于写,当单机的Redis无法应付大量的读请求时(尤其是较耗资源的请求,比如SORT命令等)可以通过复制功能建立多个从数据库,主数据库只进行写操作,而从数据库负责读操作。
从数据库持久化 持久化通常相对比较耗时,为了提高性能,可以通过复制功能建立一个(或若干个)从数据库,并在从数据库中启用持久化,同时在主数据库禁用持久化。当从数据库崩溃时重启后主数据库会自动将数据同步过来,所以无需担心数据丢失。而当主数据库崩溃时,需要在从数据库中使用SLAVEOF NO ONE命令将从数据库提升成主数据库继续服务,并在原来的主数据库启动后使用SLAVEOF命令将其设置成新的主数据库的从数据库,即可将数据同步回来。

六、Redis 安全
我们可以通过 redis 的配置文件设置密码参数,这样客户端连接到 redis 服务就需要密码验证,这样可以让你的 redis 服务更安全。