- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在尝试每 X 次制作一次 dump.rdb 和每 Y 次 appendonly.aof 的备份副本,这样如果文件由于任何原因(或者甚至只是 AOF 的 appendonly.aof 文件)损坏,我可以从中恢复我的数据dump.rdb.backup 快照,然后是自从我拥有最新的 appendonly.aof.backup 副本以来发生的任何其他更改。
我每5分钟备份一次dump.rdb,每1秒备份一次appendonly.aof。
1) 由于子进程在后台将 dump.rdb 写入临时文件 - 当子进程创建新图像时发生的关键更改会发生什么?我知道无论后台写入如何,AOF 文件都会继续追加,但新的 dump.rdb 文件是否也包含关键更改?
2) 如果 dump.rdb 不包含关键更改,是否有某种方法可以找出子进程被 fork 的确切位置?这样我就可以跟踪 AOF 文件将拥有最新信息的时间点。
谢谢!
最佳答案
通常,人们要么使用RDB,要么使用AOF作为持久化策略。拥有他们两个是相当昂贵的。每 5 分钟运行一次转储,每秒复制一次 aof 文件听起来非常频繁。除非 Redis 实例仅存储少量数据,否则您可能会杀死盒子的 I/O 子系统。
现在,关于您的问题:
1)RDB机制的语义
转储机制利用现代操作系统内核在克隆/派生过程中实现的写时复制机制。当fork完成后,系统只是通过复制页表来创建后台进程。页面本身在两个进程之间共享。如果 Redis 进程在页面上进行了写操作,操作系统将透明地复制该页面(因此 Redis 实例有自己的版本,后台进程有以前的版本)。因此,后台进程可以保证内存结构保持不变(因此是一致的)。
结果是在 fork 之后开始的任何写操作都不会被转储。转储是在 fork 时拍摄的一致快照。
2) 跟踪 fork 点
可以通过运行INFO持久化命令,计算rdb_last_save_time - rdb_last_bgsave_time_sec来估计fork时间戳,但不是很准确(仅次于第二)。
为了更加准确(毫秒),您可以解析 Redis 日志文件以提取以下行:
[3813] 11 Apr 10:59:23.132 * Background saving started by pid 3816
您至少需要“通知”日志级别才能看到这些行。
据我所知,没有办法将 AOF 中的特定条目与 RDB 的 fork 操作相关联(即不可能 100% 准确)。
关于redis - 如何备份 Redis 服务器的 RDB 和 AOF 文件进行恢复,以确保最小的数据丢失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15821348/
基本上我的情况是这样的: 1) 我最初在没有 AOF 的情况下启动了 Redis,并让它运行了 n 周。 2) 我决定要使用 AOF,所以我在 n+1 周后重启 Redis 并打开 AOF。 3) 我
AOF(Append Only File) 以日志的形式来记录每个写操作(增量保存) ,将 Redis 执行过的所有写指令记录下来 (读操作不记录), 只许追加文件但不可以改写文件 ,
一、AOF1、AOF 是什么以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,Redis启动之初会读取该文件重新构建数据,
我正在寻找备份Redis数据的最佳方法。 我读了有关RDB和AOF的文章。但是从我的 Angular 来看,最好的方法是按以下方式进行组合: 定期创建RDB,然后仅保存AOF。 这样,当您重新启动时。
我最近将 Redis 配置为使用 AOF 以及 RDB 快照。 但是,看起来 AOF 在服务器启动时没有正确重放。 我停止了服务。然后我使用 redis-check-aof 确保 /var/redis
今天为大家介绍Redis的另一种持久化策略——AOF。 什么是AOF 男孩“一觉醒来”忘记了对女孩子的承诺,这时候女孩子把曾经海誓山盟的录音逐条播放给男孩子听,帮助他“恢复记忆”。 “男孩
我的 Redis 实例显然已停止重写 AOF 文件(它已增长到许多 Gb)。更糟糕的是,它似乎停止为新的客户端连接提供服务(当使用 redis-cli 连接时,连接会通过,但随后它会在任何命令上卡住)
我已阅读 Redis 文档以找到标题的答案。但我找不到它。我想知道在集群节点迁移时如何操作RDB和AOF。 假设在同一个集群中有2个节点。(A节点,B节点)* RDB、AOF选项开启。 如果A的一些数
我正在使用 Redis 2.8.4。仅在配置中启用附加。根据我的要求,它工作正常,但这个文件可能会变得越来越大,因此将来可能会造成内存不足?有什么解决办法吗? 最佳答案 Redis 有一种方法可以通过
本文已经收录进 JavaGuide (「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识。) Redis 持久化机制属于后端面试超高频的面试知识点,老
一、Redis 持久化简介 Redis 的持久化功能是区别于 Memcached 显著特性,数据持久化可以保证系统在发生宕机和重启后数据不会丢失,对于 redis 这种存储在内存中的数据库显得尤为重要
我正在尝试在具有以下配置的 Redis 中使用混合持久性(RDB + AOF 作为尾部): aof-use-rdb-preamble yes appendonly yes save 10 1 # 或
是否有一个配置选项可以防止 Redis 在“变得太大”时重写 AOF 日志? 最佳答案 来自 redis.conf : # Specify a percentage of zero in order
我们在生产中使用 6 GB 数据大小的 redis 服务器,最初我们认为 Redis 只能用作内存缓存,如果它重新启动,那么我们可以从持久性数据存储中重新填充,停机时间最短。 现在我们意识到从持久性存
背景 昨天我们的机器意外崩溃,Redis 的 AOF 文件损坏了。 尝试使用 sudo systemctl start redis-server 启动服务时我们收到以下日志: Bad file for
如何彻底禁用RDB和AOF?我不关心持久性,只希望它在内存中。 我已经注释掉了: #save 900 1 #save 300 10 #save 60 10000 但这没有帮助,我看到 Redis 仍在
有没有办法将 AOF 文件保存在 Amazon S3 上而不是存储在本地? 这将避免用完大型数据集的磁盘空间。 最佳答案 您可以将 S3 挂载为盘符(例如:TntDrive)并设置 Redis 写入该
我正在读这个article关于 Tarantool,他们似乎说 AOF 和 WAL 日志的工作方式不同。 Tarantool: besides snapshots, it has a full-sca
如何在 Windows 上的 Redis 中启用 AOF? 我想将数据写入磁盘,以便在服务器重新启动后再次使用它。 在我试过的 .php 文件中: $redis->bgRewriteAOF(); 在r
对 Redis 有点陌生。 假设设置/情况:假设 Redis 每 10 分钟做一次快照。 AOF 关闭。你有一个名为“帖子”的集合,它保存帖子的 ID。您还有 MySQL 表来保存帖子的 ID。 My
我是一名优秀的程序员,十分优秀!