您的位置:首页 > 数据库 > Redis

redis的持久化

2017-08-26 00:00 239 查看
为了提高redis的安全性和可靠性,在redis发生故障宕机重启后,还可以尽可能的恢复宕机前的状态。这里,redis提供了两种持久化方式来解决:Redis Database(RDB)Append-only File(AOF)

快照持久化

修改redis.conf配置文件:

采用.rdb文件格式存储
rdb是非常好的备份和故障恢复方案,快速读写、性能很高。可以实现每小时、每天、每周、每月保存rdb文件。

创建快照的几种方式
♦ BGSAVE命令
redis服务器调用fork创建一个子进程,然后子进程负责将快照写入硬盘,父进程则继续处理命令请求。
windows不支持。
♦ SAVE命令
会阻塞redis服务器。不常用,通常只会在没有足够内存去执行BGSAVE命令的情况下、或者即使等待持久化操作执行也无所谓的请下课使用。
save 60 10000
表示:
60秒之内有10000次写入,这个条件满足时,redis就会触发BGSAVE命令。
如果用户设置了多个save,任意一个save满足条件时就会触发BGSAVE命令。
不推荐SAVE时间间隔小于30秒。
示例:
dbfilename dump.rdb     #RDB快照文件名称
save 900 1      #900s之内有数据库有1次数据改变
save 300 10     #300s之内有数据库有10次数据被改变
save 60 10000   #10000s之内有数据库60次数据被改变

♦ SHUTDOWN命令
redis服务器收到SHUTDOWN命令或者标准TERM信号时,会执行一个SAVE命令,然后关闭服务器。
♦ 多个redis服务器
当一个redis服务器连接到另一个redis服务器,并向对方发送SYNC命令执行一次复制操作,如果主服务器目前没有在执行BGSAVE、或者主服务器并非刚执行完BGSAVE,那么主服务器就会执行BGSAVE。

其他配置选项
stop-writes-on-bgsave-error:可能值yes或no。如果最新后台保存失败,Redis停止接收写操作。Redis保存成功之后,再次接收写操作。默认为yes。♦ rdbcompression:可能值yes或no。Redis使用LZF压缩RDB文件。默认为yes。♦ rdbchecksum:可能值yes或no。Redis在RDB文件末尾保存一个校验码,在加载RDB文件之前执行校验。如果RDB校验码不匹配,Redis不启动。默认为yes。♦ dbfilename:设置RDB的文件名。默认为dump.rdb。
save:不再累述。
dir:指定AOF和RDB文件目录。

试用场景
♦ 只适用于那些丢失一部分数据也不会造成问题的应用程序。
♦ 还要考虑尽可能低降低快照持久化带来的资源消耗。
对于真实的硬件、VMWare虚拟机或者KVM虚拟机,redis进程每占用一个GB的内存,创建该进程的子进程所需的时间就要增加10~20毫秒;对于Xen虚拟机,根据配置的不同,redis进程每占一个GB的内存,创建该进程的子进程所需的时间就要增加200~300毫秒。
因此,如果redis进程占用了20GB的内存,那么在标准硬件上运行BGSAVE命令所创建的子进程讲导致redis停顿20
3ff0
0~400毫秒;如果是Xen虚拟机,讲停顿4~6秒。
解决方式:这种情况下,可以使用手动发送BGSAVE或SAVE命令的方式进行持久化;或者使用SAVE命令,速度要快。

AOF持久化

启动
(1)命令行
./redis-server --appendonly yes
(2)配置文件
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
其中,appendfsync后面可以跟三个参数:always、everysec、no。
为了兼顾数据安全和写入性能,用户可以考虑使用 appendfsync everysec

优化
BGREWRITEAOF:通过移除AOF文件中的冗余命令来重写AOF文件,使AOF文件的体积变得尽可能地小。
设置auto-aof-rewrite-percentage选项和auto-aof-rewrite-min-size选项来自动执行BGREWRITEAOF。

auto-aof-rewrite-percentage:有效值从0到100。当AOF大小增长指定百分比时,Redis通过隐式调用命令BGREWRITEAOF自动重写AOF日志文件。默认值是100。

auto-aof-rewrite-min-size:AOF日志文件最小重写大小。防止AOF重写直到达到指定的AOF文件的最小大小,即使超过了指定的auto-aof-rewrite-percentage值。默认值为67108864字节。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Redis