Redis作为一个内存数据库,在数据安全以及集群部署方面都提供了一系列工具可供使用。
一. Redis数据库数据备份与恢复
Redis是内存型数据库,但是为了数据安全,就需要有“数据持久化“(就是将数据存储在磁盘上)的机制,在备份方面提供了两种工具,分别为RDB和AOF。
1.RDB备份与恢复
RDB是利用快照来实现数据持久化的,当符合特定条件时,redis将会自动的将内存中的数据保存在硬盘上,当redis启动时,会自动的将磁盘上的数据加载到内存中以实现数据环境的恢复。
(1)Redis条件进行RDB备份,步骤如下:
A.修改配置文件redis.conf:
save 900 1 # 900秒内有至少1个键被更改则进行快照
save 300 10 # 300秒内有至少10个键被更改则进行快照
save 60 10000 # 60秒内有至少10000个键被更改则进行快照
dir path #path为redis运行环境时操作的路径
dbfilename rdbname #rdb数据备份文件名(如dump.rdb)1
2
3
4
5
6
B.重启Redis
注:这种方式的实现是Redis的主线程在条件触发后,fork子进程后,在子进程中完成数据持久化的。
(2)Redis强制进行RDB备份,步骤如下:
在redis-cli中,使用如下命令:
redis-cli>SAVE #在主进程强制阻塞进行快照备份
或者
redis-cli>BGSAVE #主进程fork子进程进行快照备份1
2
3
2.AOF备份与恢复
AOF(append only file)就是通过“将redis执行的每一条指令存储在磁盘文件中“ 以实现数据持久化。
(1)开启AOF功能
默认情况下,Redis是不开启AOF的,要想使用该功能,则在redis.conf中配置:
appendonly yes1
AOF文件存放的位置和RDB相同,可以这样设置AOF文件:
dir path #文件存储路径
appendfilename appendonly.aof #aof文件拓展名为aof1
2
AOF的重写配置:
auto-aof-rewrite-percentage 100 # 当目前的AOF文件大小超过上一次重写时的AOF文件大小的百分之多少时会再次进行重写,如果之前没有重写过,则以启动时的AOF文件大小为依据
auto-aof-rewrite-min-size 64mb # 允许重写的最小AOF文件大小1
2
注意:“重写”并不是对原有aof文件进行重新写入或其它操作,而是对原有指令进行简化,如曾经对list进行三个push:
lpush li_key 1
lpush li_key 2
lpush li_key 31
2
3
然后重写的结果就是:
lpush li_key 1 2 31
同理,对HASH table、SET、SORTED SET也是同样的处理方式。
通过重写,就实现了aof文件的压缩;
当然,细心的朋友会发现一个问题,对AOF重写时会影响redis的请求访问的,那么redis是怎么解决的呢?
A. Redis通过fork子进程来完成重写;
B. 重写时在内存中先创建AOF缓存,在重写的同时,将新指令同时写入旧的AOF文件中和AOF缓存中;
C. 重写完成后,将AOF缓存的内容写入磁盘,替换旧的AOF文件
(2)主动强制进行AOF备份
redis-cli> BGREWRITEAOF1
二.数据迁移和主从复制
1.直接备份文件数据迁移
Redis的数据迁移比较简单,步骤如下:
(1)关闭目标Redis服务;
(2)将相应的RDB文件或者AOF文件复制过去;
(3)设置REDIS的DIR或者开启AOF功能;
(4)启动目标REDIS服务;
2.主从复制
主服务器配置redis.conf:
bind 127.0.0.1 192.168.1.158 #后面的IP地址为从服务器能访问的主机的ip1
从服务器配置redis.conf:
slaveof #masterip为192.168.1.158 masterport默认是63791
启动主服务器和从服务器
另外:利用主从复制还能够实现数据迁移,将目标redis服务设置成从服务,然后进行数据同步,完成后,就取消主从关系,就完成了数据迁移了。