共计 2780 个字符,预计需要花费 7 分钟才能阅读完成。
这篇文章主要介绍“Redis 提供了哪些持久化”,在日常操作中,相信很多人在 Redis 提供了哪些持久化问题上存在疑惑,丸趣 TV 小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Redis 提供了哪些持久化”的疑惑有所帮助!接下来,请跟着丸趣 TV 小编一起来学习吧!
一、Redis 提供了哪些持久化机制:
1). RDB 持久化:
该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘。
2). AOF 持久化:
该机制将以日志的形式记录服务器所处理的每一个写操作,在 Redis 服务器启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的。
3). 无持久化:
我们可以通过配置的方式禁用 Redis 服务器的持久化功能,这样我们就可以将 Redis 视为一个功能加强版的 memcached 了。
4). 同时应用 AOF 和 RDB。
二、RDB 机制的优势和劣势:
RDB 存在哪些优势呢?
1). 一旦采用该方式,那么你的整个 Redis 数据库将只包含一个文件,这对于文件备份而言是非常完美的。比如,你可能打算每个小时归档一次最近 24 小时的数据,同时还要每天归档一次最近 30 天的数据。通过这样的备份策略,一旦系统出现灾难性故障,我们可以非常容易的进行恢复。
2). 对于灾难恢复而言,RDB 是非常不错的选择。因为我们可以非常轻松的将一个单独的文件压缩后再转移到其它存储介质上。
3). 性能最大化。对于 Redis 的服务进程而言,在开始持久化时,它唯一需要做的只是 fork 出子进程,之后再由子进程完成这些持久化的工作,这样就可以极大的避免服务进程执行 IO 操作了。
4). 相比于 AOF 机制,如果数据集很大,RDB 的启动效率会更高。
RDB 又存在哪些劣势呢?
1). 如果你想保证数据的高可用性,即最大限度的避免数据丢失,那么 RDB 将不是一个很好的选择。因为系统一旦在定时持久化之前出现宕机现象,此前没有来得及写入磁盘的数据都将丢失。
2). 由于 RDB 是通过 fork 子进程来协助完成数据持久化工作的,因此,如果当数据集较大时,可能会导致整个服务器停止服务几百毫秒,甚至是 1 秒钟。
三、AOF 机制的优势和劣势:
AOF 的优势有哪些呢?
1). 该机制可以带来更高的数据安全性,即数据持久性。Redis 中提供了 3 中同步策略,即每秒同步、每修改同步和不同步。事实上,每秒同步也是异步完成的,其效率也是非常高的,所差的是一旦系统出现宕机现象,那么这一秒钟之内修改的数据将会丢失。而每修改同步,我们可以将其视为同步持久化,即每次发生的数据变化都会被立即记录到磁盘中。可以预见,这种方式在效率上是最低的。至于无同步,无需多言,我想大家都能正确的理解它。
2). 由于该机制对日志文件的写入操作采用的是 append 模式,因此在写入过程中即使出现宕机现象,也不会破坏日志文件中已经存在的内容。然而如果我们本次操作只是写入了一半数据就出现了系统崩溃问题,不用担心,在 Redis 下一次启动之前,我们可以通过 redis-check-aof 工具来帮助我们解决数据一致性的问题。
3). 如果日志过大,Redis 可以自动启用 rewrite 机制。即 Redis 以 append 模式不断的将修改数据写入到老的磁盘文件中,同时 Redis 还会创建一个新的文件用于记录此期间有哪些修改命令被执行。因此在进行 rewrite 切换时可以更好的保证数据安全性。
4). AOF 包含一个格式清晰、易于理解的日志文件用于记录所有的修改操作。事实上,我们也可以通过该文件完成数据的重建。
AOF 的劣势有哪些呢?
1). 对于相同数量的数据集而言,AOF 文件通常要大于 RDB 文件。
2). 根据同步策略的不同,AOF 在运行效率上往往会慢于 RDB。总之,每秒同步策略的效率是比较高的,同步禁用策略的效率和 RDB 一样高效。
四、其它:
1. Snapshotting:
缺省情况下,Redis 会将数据集的快照 dump 到 dump.rdb 文件中。此外,我们也可以通过配置文件来修改 Redis 服务器 dump 快照的频率,在打开 6379.conf 文件之后,我们搜索 save,可以看到下面的配置信息:
# 在 900 秒 (15 分钟) 之后,如果至少有 1 个 key 发生变化,则 dump 内存快照。
save 900 1
# 在 300 秒 (5 分钟) 之后,如果至少有 10 个 key 发生变化,则 dump 内存快照。
save 300 10
# 在 60 秒 (1 分钟) 之后,如果至少有 10000 个 key 发生变化,则 dump 内存快照。
save 60 10000
2. Dump 快照的机制:
1). Redis 先 fork 子进程。
2). 子进程将快照数据写入到临时 RDB 文件中。
3). 当子进程完成数据写入操作后,再用临时文件替换老的文件。
3. AOF 文件:
上面已经多次讲过,RDB 的快照定时 dump 机制无法保证很好的数据持久性。如果我们的应用确实非常关注此点,我们可以考虑使用 Redis 中的 AOF 机制。对于 Redis 服务器而言,其缺省的机制是 RDB,如果需要使用 AOF,则需要修改配置文件中的以下条目:
将 appendonly no 改为 appendonly yes
从现在起,Redis 在每一次接收到数据修改的命令之后,都会将其追加到 AOF 文件中。在 Redis 下一次重新启动时,需要加载 AOF 文件中的信息来构建最新的数据到内存中。
4. AOF 的配置:
在 Redis 的配置文件中存在三种同步方式,它们分别是:
appendfsync always # 每次有数据修改发生时都会写入 AOF 文件。
appendfsync everysec # 每秒钟同步一次,该策略为 AOF 的缺省策略。
appendfsync no # 从不同步。高效但是数据不会被持久化。
5. 如何修复坏损的 AOF 文件:
1). 将现有已经坏损的 AOF 文件额外拷贝出来一份。
2). 执行 redis-check-aof–fix filename 命令来修复坏损的 AOF 文件。
3). 用修复后的 AOF 文件重新启动 Redis 服务器。
6. Redis 的数据备份:
在 Redis 中我们可以通过 copy 的方式在线备份正在运行的 Redis 数据文件。这是因为 RDB 文件一旦被生成之后就不会再被修改。Redis 每次都是将最新的数据 dump 到一个临时文件中,之后在利用 rename 函数原子性的将临时文件改名为原有的数据文件名。因此我们可以说,在任意时刻 copy 数据文件都是安全的和一致的。鉴于此,我们就可以通过创建 cron job 的方式定时备份 Redis 的数据文件,并将备份文件 copy 到安全的磁盘介质中。
到此,关于“Redis 提供了哪些持久化”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注丸趣 TV 网站,丸趣 TV 小编会继续努力为大家带来更多实用的文章!