同步操作将从 turnon/db-tutorial 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
Redis 支持持久化,即把数据存储到硬盘中。
Redis 提供了两种持久化方式:
RDB 快照(snapshot)
- 将存在于某一时刻的所有数据都写入到硬盘中。只追加文件(append-only file,AOF)
- 它会在执行写命令时,将被执行的写命令复制到硬盘中。这两种持久化方式既可以同时使用,也可以单独使用。
将内存中的数据存储到硬盘的一个主要原因是为了在之后重用数据,或者是为了防止系统故障而将数据备份到一个远程位置。另外,存储在 Redis 里面的数据有可能是经过长时间计算得出的,或者有程序正在使用 Redis 存储的数据进行计算,所以用户会希望自己可以将这些数据存储起来以便之后使用,这样就不必重新计算了。
Redis 提供了两种持久方式:RDB 和 AOF。你可以同时开启两种持久化方式。在这种情况下, 当 redis 重启的时候会优先载入 AOF 文件来恢复原始的数据,因为在通常情况下 AOF 文件保存的数据集要比 RDB 文件保存的数据集要完整。
RDB 即快照方式,它将某个时间点的所有 Redis 数据保存到一个经过压缩的二进制文件(RDB 文件)中。
创建 RDB 后,用户可以对 RDB 进行备份,可以将 RDB 复制到其他服务器从而创建具有相同数据的服务器副本,还可以在重启服务器时使用。一句话来说:RDB 适合作为 冷备。
RDB 既可以手动执行,也可以根据服务器配置选项定期执行。该功能可以将某个时间点的数据库状态保存到一个 RDB 文件中。
有两个 Redis 命令可以用于生成 RDB 文件:SAVE
和 BGSAVE
。
SAVE
命令会阻塞 Redis 服务器进程,直到 RDB 创建完成为止,在阻塞期间,服务器不能响应任何命令请求。BGSAVE
命令会派生出(fork)一个子进程,然后由子进程负责创建 RDB 文件,服务器进程(父进程)继续处理命令请求。注意:
BGSAVE
命令执行期间,SAVE
、BGSAVE
、BGREWRITEAOF
三个命令会被拒绝,以免与当前的BGSAVE
操作产生竞态条件,降低性能。
Redis 允许用户通过设置服务器配置的 save
选项,让服务器每隔一段时间自动执行一次 BGSAVE
命令。
用户可以通过 save
选项设置多个保存条件,但只要其中任意一个条件被满足,服务器就会执行 BGSAVE
命令。
举例来说,redis.conf
中设置了如下配置:
save 900 1 -- 900 秒内,至少对数据库进行了 1 次修改
save 300 10 -- 300 秒内,至少对数据库进行了 10 次修改
save 60 10000 -- 60 秒内,至少对数据库进行了 10000 次修改
只要满足以上任意条件,Redis 服务就会执行 BGSAVE 命令。
RDB 文件的载入工作是在服务器启动时自动执行的,Redis 并没有专门用于载入 RDB 文件的命令。
服务器载入 RDB 文件期间,会一直处于阻塞状态,直到载入完成为止。
🔔 注意:因为 AOF 通常更新频率比 RDB 高,所以丢失数据相对更少。基于这个原因,Redis 有以下默认行为:
- 只有在关闭 AOF 功能的情况下,才会使用 RDB 还原数据,否则优先使用 AOF 文件来还原数据。
RDB 文件是一个经过压缩的二进制文件,由多个部分组成。
对于不同类型(STRING、HASH、LIST、SET、SORTED SET)的键值对,RDB 文件会使用不同的方式来保存它们。
Redis 本身提供了一个 RDB 文件检查工具 redis-check-dump。
Redis RDB 默认配置如下:
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
Redis 的配置文件 redis.conf
中与 RDB 有关的选项:
save
- Redis 会根据 save
选项,让服务器每隔一段时间自动执行一次 BGSAVE
命令。
stop-writes-on-bgsave-error
- 当 BGSAVE 命令出现错误时停止写 RDB 文件
rdbcompression
- RDB 文件开启压缩功能。
rdbchecksum
- 对 RDB 文件进行校验。
dbfilename
- RDB 文件名。
dir
- RDB 文件和 AOF 文件的存储路径。
AOF(Append Only File)
是以 文本日志形式 将 所有写命令以 Redis 命令请求协议格式追加到 AOF 文件的末尾,以此来记录数据的变化。当服务器重启时,会重新载入和执行 AOF 文件中的命令,就可以恢复原始的数据。AOF 适合作为 热备。
AOF 可以通过 appendonly yes
配置选项来开启。
命令请求会先保存到 AOF 缓冲区中,之后再定期写入并同步到 AOF 文件。
Redis 命令请求会先保存到 AOF 缓冲区,再定期写入并同步到 AOF 文件。
AOF 的实现可以分为命令追加(append)、文件写入、文件同步(sync)三个步骤。
appendfsync
选项来判断 AOF 缓冲区内容是否需要写入和同步到 AOF 文件中。appendfsync
不同选项决定了不同的持久化行为:
always
- 将缓冲区所有内容写入并同步到 AOF 文件。everysec
- 将缓冲区所有内容写入到 AOF 文件,如果上次同步 AOF 文件的时间距离现在超过一秒钟,那么再次对 AOF 文件进行同步,这个同步操作是有一个线程专门负责执行的。no
- 将缓冲区所有内容写入到 AOF 文件,但并不对 AOF 文件进行同步,何时同步由操作系统决定。因为 AOF 文件中包含了重建数据库所需的所有写命令,所以服务器只要载入并执行一遍 AOF 文件中保存的写命令,就可以还原服务器关闭前的数据库状态。
AOF 载入过程如下:
随着 Redis 不断运行,AOF 的体积也会不断增长,这将导致两个问题:
为了解决 AOF 体积膨胀问题,Redis 提供了 AOF 重写功能,来对 AOF 文件进行压缩。AOF 重写可以产生一个新的 AOF 文件,这个新的 AOF 文件和原来的 AOF 文件所保存的数据库状态一致,但体积更小。
AOF 重写并非读取和分析现有 AOF 文件的内容,而是直接从数据库中读取当前的数据库状态。即依次读取数据库中的每个键值对,然后用一条命令去记录该键值对,以此代替之前可能存在冗余的命令。
作为一种辅助性功能,显然 Redis 并不想在 AOF 重写时阻塞 Redis 服务接收其他命令。因此,Redis 决定通过 BGREWRITEAOF
命令创建一个子进程,然后由子进程负责对 AOF 文件进行重写,这与 BGSAVE
原理类似。
BGREWRITEAOF
命令时,Redis 服务器会维护一个 AOF 重写缓冲区。当 AOF 重写子进程开始工作后,Redis 每执行完一个写命令,会同时将这个命令发送给 AOF 缓冲区和 AOF 重写缓冲区。可以通过设置 auto-aof-rewrite-percentage
和 auto-aof-rewrite-min-size
,使得 Redis 在满足条件时,自动执行 BGREWRITEAOF
。
假设配置如下:
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
表明,当 AOF 大于 64MB
,且 AOF 体积比上一次重写后的体积大了至少 100%
时,执行 BGREWRITEAOF
。
AOF 的默认配置:
appendonly no
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
AOF 持久化通过在 redis.conf
中的 appendonly yes
配置选项来开启。
appendonly
- 开启 AOF 功能。appendfilename
- AOF 文件名。appendfsync
- 用于设置同步频率,它有以下可选项:
always
- 每个 Redis 写命令都要同步写入硬盘。这样做会严重降低 Redis 的速度。everysec
- 每秒执行一次同步,显示地将多个写命令同步到硬盘。为了兼顾数据安全和写入性能,推荐使用 appendfsync everysec
选项。Redis 每秒同步一次 AOF 文件时的性能和不使用任何持久化特性时的性能相差无几。no
- 让操作系统来决定应该何时进行同步。no-appendfsync-on-rewrite
- AOF 重写时不支持追加命令。auto-aof-rewrite-percentage
- AOF 重写百分比。auto-aof-rewrite-min-size
- AOF 重写文件的最小大小。dir
- RDB 文件和 AOF 文件的存储路径。当 Redis 启动时, 如果 RDB 和 AOF 功能都开启了,那么程序会优先使用 AOF 文件来恢复数据集,因为 AOF 文件所保存的数据通常是最完整的。
有很多用户都只使用 AOF 持久化, 但并不推荐这种方式: 因为定时生成 RDB 快照(snapshot)非常便于进行数据库备份,并且快照恢复数据集的速度也要比 AOF 恢复的速度要快,除此之外,使用快照还可以避免之前提到的 AOF 程序的 bug 。
在 Redis 2.2 或以上版本,可以在不重启的情况下,从 RDB 切换为 AOF :
执行的第二条命令用于关闭快照功能。 这一步是可选的, 如果你愿意的话, 也可以同时使用快照和 AOF 这两种持久化功能。
重要:别忘了在
redis.conf
中打开 AOF 功能!否则的话,服务器重启之后,之前通过 CONFIG SET 设置的配置就会被遗忘,程序会按原来的配置来启动服务器。
BGSAVE
和 BGREWRITEAOF
命令不可以同时执行。这是为了避免两个 Redis 后台进程同时对磁盘进行大量的 I/O 操作。
如果 BGSAVE
正在执行,并且用户显示地调用 BGREWRITEAOF
命令,那么服务器将向用户回复一个 OK 状态,并告知用户,BGREWRITEAOF
已经被预定执行。一旦 BGSAVE
执行完毕, BGREWRITEAOF
就会正式开始。
应该确保 Redis 数据有完整的备份。
备份 Redis 数据建议采用 RDB。
Redis 的容灾备份基本上就是对数据进行备份,并将这些备份传送到多个不同的外部数据中心。
容灾备份可以在 Redis 运行并产生快照的主数据中心发生严重的问题时,仍然让数据处于安全状态。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。