标签:失败 需要 过程 推荐 数据中心 生成 保存数据 文件恢复 重启
Redis持久化
RDB和AOF的对比
RDB的优点:
RDB缺点:
AOF优点:
AOF缺点:
我们应该选择哪一个?
通常,如果你想要更深度的数据安全,你应该同时使用这两种方法
如果你更多的关注数据,但是同时能够忍受几分钟数据的丢失,你可以仅仅使用RDB
但是有许多用户仅仅使用AOF,但是我们并不鼓励这样,因为RDB快照能够很好的做数据库备份,能够快速重启,能够避免AOF引擎的一些bugs
快照
默认Redis保存数据集的快照到磁盘上,以名叫dump.rdb的文件名保存。它是一个二进制文件,例如,如果每60秒,至少有1000个keys改变,那么让Redis自动执行快照
save 60 1000
工作流程:
当Redis需要做快照的时候,Redis forks,会有一个子进程和父进程。子进程开始写数据集到一个临时的RDB文件。当子进程完成后,新的文件会替换老的文件
Append-only file
快照并不是很耐用,如果你的计算机停止Redis运行或者你kill -9实例,最新写到Redis的数据会丢失。对一些应用来说,这并不是理想的选择。为了更好的耐用,你可以选择append-only file,在配置文件中
appendonly yes
当设置完成后,每一次修改数据集的操作将会添加到AOF中,当你重启Redis的时候,会重新应用AOF来构建数据集
Log重写
AOF会越来越大,例如,你修改一个key的值100次,你的数据集会存储最终的值,但是在AOF中会有100条记录,99条记录对于重构数据集是不需要的。
Redis支持一个特性:Redis会以守护进程重新构建AOF,而且并不会影响客户端的服务。当你执行BGREWRITEAOF,Redis会写最简短的命令,来构建数据集。如果Redis版本是2.2,你需要时常运行BGREWRITEAOF命令。Redis 2.4会自动触发log重写
append only file怎么耐用
你可以配置Redis同步数据到磁盘的频率,有3个不同的选择
推荐的策略是fsync every second,这也是默认的策略。因为它是相当快并且安全。always策略在实践中是非常慢的。
如果我的AOF文件损害了,我应该做什么?
当写AOF文件的时候,服务崩溃。这样使得Redis无法加载AOF文件。当这个发生的时候,你可以使用下面的流程来解决问题
Log重写的工作流程
Log重写使用和快照一样的copy-on-write方式,下面是工作流程
如果现在在使用dump.rdb快照,怎么切换成AOF?
Redis >= 2.2
Redis2.0
AOF和RDB持久化的互动
Redis>2.4会避免当RDB快照正在执行的过程中,来触发AOF重写。当AOF重写正在执行的过程中,来执行BGSAVE。这样做是为了避免两个守护进程带来高强度的磁盘IO
当快照正在执行过程中,用户明确使用BGREWRITEAOF命令来请求log重写操作,服务会返回OK,但是只有当快照执行完成后,才开始执行log重写
当AOF和RDB持久化都开启的时候,Redis重启的时候,AOF文件用来构造数据集,来保证数据的完整性。
备份Redis数据
如果数据不备份,会导致数据的丢失。Redis有非常友好的数据备份。当数据库在运行的时候,你可以复制RDB文件。RDB文件只要生成,并不会修改了。这样意味着复制RDB文件是安全的。下面是我的建议:
灾难恢复
类似于数据备份,通过传输RDB快照到其他的机器上,然后通过一些验证方法来验证数据的正确性。当数据丢失了,可以使用这些备份文件恢复。
标签:失败 需要 过程 推荐 数据中心 生成 保存数据 文件恢复 重启
原文地址:http://www.cnblogs.com/yandufeng/p/6526339.html