摘要:注未来可能会将和整合成单个持久化模型相关文档英文中文相关链接下安装扩展二主从配置三集群搭建与简单使用四
Redis持久化
Redis 为了内部数据的安全考虑,会把本身的数据以文件的形式保存到硬盘中一份,在服务器重启后会自动把硬盘的数据恢复到内存(Redis)里面
Redis持久化分为:
RDB 持久化方式
AOF 持久化方式
两种持久化可以同时开启
RDB(Redis DataBase)持久化方式RDB 持久化是指在指定的时间间隔内将内存中的数据快照写入磁盘,实际操作过程是 fork 一个子进程,先将数据写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储
Redis 将数据库快照保存在名字为 dump.rdb 的二进制文件中
RDB 持久化快照名称与路径(redis.conf 文件):
RDB持久化备份频率:
$ save 900 1 #900秒内如果超过1个key被修改,则发起快照保存 $ save 300 10 #300秒内如果超过10个key被修改,则发起快照保存 $ save 60 10000 #60秒内如果超过10000个key被修改,则发起快照保存
优点:
非常适合于备份,比如你可以在每个小时保存一下过去24小时内的数据,同时每天保存过去30天的数据,这样即使出了问题你也可以根据需求恢复到不同版本的数据
很方便传送到远端数据中心,非常适用于灾难恢复
RDB 在保存 RDB 文件时父进程唯一需要做的就是 fork 出一个子进程,接下来的工作全部由子进程来做,父进程不需要再做其他 IO 操作,所以 RDB 持久化方式可以最大化 Redis 的性能
4.与 AOF 相比,在恢复大的数据的时候,RDB 效率更高
缺点:
如果你想保证数据的高可用性,即最大限度的避免数据丢失,那么 RDB 将不是一个很好的选择。因为系统一旦在定时持久化之前出现宕机现象,你可能会丢失几分钟的数据
由于 RDB 是通过 fork子进程来协助完成数据持久化工作的,因此,如果当数据较大时,可能会导致整个服务器停止服务几百毫秒,甚至是1秒钟
手动发起RDB持久化方式:
输入 save
或者 bgsave (bgsave 是开启多带带线程)
AOF(Append Only File)持久化方式AOF 持久化以日志的形式记录服务器所处理的每一个写、删除操作,查询操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据
开启 AOF 持久化(redis.conf)
注:重启 Redis 才生效
AOF 持久化名称与路径:
AOF 持久化备份频率:
# 每次有新命令追加到 AOF 文件时就执行一次同步 :非常慢,也非常安全 $ always # 每秒同步一次:足够快(和使用 RDB 持久化差不多),并且在故障时只会丢失 1 秒钟的数据 # 推荐(并且也是默认)的措施为每秒同步一次, 这种策略可以兼顾速度和安全性 $ everysec # 从不同步:将数据交给操作系统来处理。更快,也更不安全的选择 $ no
AOF 持久化备份优化:
因为 AOF 的运作方式是不断地将命令追加到文件的末尾, 所以随着写入命令的不断增加, AOF 文件的体积也会变得越来越大
例如, 如果你对一个计数器调用了 100 次 INCR , 那么仅仅是为了保存这个计数器的当前值, AOF 文件就需要使用 100 条记录(entry)。然而在实际上, 只使用一条 SET 命令已经足以保存计数器的当前值了, 其余 99 条记录实际上都是多余的
输入 bgrewriteaof 命令优化 AOF 文件
AOF 文件损坏:
服务器可能在程序正在对 AOF 文件进行写入时宕机, 宕机会造成了 AOF 文件出错(corrupt), 那么 Redis 在重启时会拒绝载入这个 AOF 文件, 从而确保数据的一致性不会被破坏。
修复出错的 AOF 文件:
为现有的 AOF 文件创建一个备份
使用 Redis 附带的 redis-check-aof 程序,对原来的 AOF 文件进行修复:
$ redis-check-aof –fix
使用 diff -u 对比修复后的 AOF 文件和原始 AOF 文件的备份,查看两个文件之间的不同之处
重启 Redis 服务器,等待服务器载入修复后的 AOF 文件,并进行数据恢复
优点:
AOF 持久化可以带来更高的数据安全性。Redis 中提供了3种同步策略,即每秒同步、每修改同步和不同步。使用默认的每秒同步其效率也是非常高的(同步是由后台线程进行处理的,主线程会尽力处理客户端请求),一旦出现故障,你最多丢失1秒的数据
AOF 文件是一个只进行追加的日志文件,所以不需要写入 seek,即使由于某些原因(磁盘空间已满,写的过程中宕机等等)未执行完整的写入命令,你也也可使用 redis-check-aof 工具修复这些问题
Redis 可以在 AOF 文件体积变得过大时,自动地在后台对 AOF 进行重写: 重写后的新 AOF 文件包含了恢复当前数据所需的最小命令集合。 整个重写操作是绝对安全的,因为 Redis 在创建新 AOF 文件的过程中,会继续将命令追加到现有的 AOF 文件里面,即使重写过程中发生宕机,现有的 AOF 文件也不会丢失。 而一旦新 AOF 文件创建完毕,Redis 就会从旧 AOF 文件切换到新 AOF 文件,并开始对新 AOF 文件进行追加操作
AOF 文件有序地保存了对数据库执行的所有写入操作, 这些写入操作以 Redis 协议的格式保存, 因此 AOF 文件的内容非常容易被人读懂, 对文件进行分析(parse)也很轻松。 导出(export) AOF 文件也非常简单: 举个例子, 如果你不小心执行了 FLUSHALL 命令, 但只要 AOF 文件未被重写, 那么只要停止服务器, 移除 AOF 文件末尾的 FLUSHALL 命令, 并重启 Redis , 就可以将数据集恢复到 FLUSHALL 执行之前的状态
缺点:
对于相同的数据来说,AOF 文件通常要大于 RDB 文件
根据同步策略的不同,AOF 的运行效率可能会慢于 RDB 。总之,每秒同步策略的效率是比较高的,同步禁用策略的效率和 RDB 一样高效。不过在处理巨大的写入载入时,RDB 可以提供更有保证的最大延迟时间(latency)
从RDB方式切换为AOF方式在 Redis 2.2 或以上版本,可以在不重启的情况下,从 RDB 切换到 AOF :
为最新的 dump.rdb 文件创建一个备份
将备份放到一个安全的地方
执行以下两条命令:
# 开启 AOF 功能,Redis 会阻塞直到初始 AOF 文件创建完成为止 # 之后 Redis 会继续处理命令请求, 并开始将写入命令追加到 AOF 文件末尾 $ redis-cli config set appendonly yes # 关闭 RDB 功能 $ redis-cli config set save
确保写命令会被正确地追加到 AOF 文件的末尾
注: 在redis.conf 中打开 AOF 功能,否则服务器重启之后, 之前通过 CONFIG SET 设置的配置就会被遗忘, 程序会按原来的配置来启动服务器。
如果你对数据安全性非常重视的话,你应该同时使用两种持久化功能
如果你承受数分钟以内的数据丢失,你可以只使用 RDB 持久化
二者选择的标准,就是看是否愿意牺牲一些性能,换取更高的缓存一致性(AOF),还是愿意写操作频繁的时候,不启用备份来换取更高的性能,待手动运行 save 的时候,再做备份(RDB)。
注: 未来 Redis 可能会将 AOF 和 RDB 整合成单个持久化模型.
相关文档:
英文:https://redis.io/topics/persi...
中文:http://www.redis.cn/topics/pe...
相关链接:
Linux下PHP安装Redis扩展(二)
Redis主从配置(三)
Redis集群搭建与简单使用(四)
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/36299.html
摘要:支持和两种持久化机制持久化功能有效地避免因进程退出造成的数据丢失问题当下次重启时利用之前持久化的文件即可实现数据恢复掌握持久化机制对于学习非常重要持久化是把当前进程数据生成快照保存到硬盘的过程出发持久化过程分发手动触发和自动触发一触发机制手 Redis支持RDB和AOF两种持久化机制,持久化功能有效地避免因进程退出造成的数据丢失问题,当下次重启时利用之前持久化的文件即可实现数据恢复....
摘要:注未来可能会将和整合成单个持久化模型相关文档英文中文相关链接下安装扩展二主从配置三集群搭建与简单使用四 Redis持久化 Redis 为了内部数据的安全考虑,会把本身的数据以文件的形式保存到硬盘中一份,在服务器重启后会自动把硬盘的数据恢复到内存(Redis)里面 Redis持久化分为: RDB 持久化方式 AOF 持久化方式 两种持久化可以同时开启 RDB(Redis DataBa...
摘要:数据持久化到磁盘在的编码中没有使用类似的事件循环,我们在此依赖字段作为标识。变化即为持久化的时机。服务启动加载数据持久化数据从文件加载进内存的方式是模拟客户端执行命令,逐条将文件命令发送给服务端。 写在前面 本文实现的Godis代码版本为:v0.1 Redis持久化方式 RDB持久化 BGSAVE和SAVE命令生成RDB文件,存储数据库信息。当服务器启动,RDB文件也会作为原始数据,加...
摘要:数据持久化到磁盘在的编码中没有使用类似的事件循环,我们在此依赖字段作为标识。变化即为持久化的时机。服务启动加载数据持久化数据从文件加载进内存的方式是模拟客户端执行命令,逐条将文件命令发送给服务端。 写在前面 本文实现的Godis代码版本为:v0.1 Redis持久化方式 RDB持久化 BGSAVE和SAVE命令生成RDB文件,存储数据库信息。当服务器启动,RDB文件也会作为原始数据,加...
摘要:前面容器重建后需要重新运行命令绑定关联,需要命令行下生效。直接同步成功,在查看关系均有对方信息。是否要守护进程这里是经过多次测试,发现容器重启,也会正常启动。哨兵的配置于此类似,略过。 前面mysql容器重建后需要重新运行 change master to 命令绑定关联,8.0需要命令行下生效。redis首先想到用官方的,没想到进去各个基本shell命令无法使用,所以先弃了。这次由于官...
阅读 3047·2021-11-23 09:51
阅读 671·2021-09-03 10:30
阅读 3065·2021-08-31 09:40
阅读 3157·2019-08-30 14:22
阅读 765·2019-08-30 14:09
阅读 2792·2019-08-30 13:21
阅读 3084·2019-08-28 18:03
阅读 2751·2019-08-26 13:44