[转帖]Redis持久化-RDB和AOF

redis,持久,rdb,aof · 浏览次数 : 0

小编点评

**Redis 持久化功能** **RDB 持久化:** * 将当前内存数据保存到硬盘的文件中。 * 当 Redis 重启时,利用 dump.rdb 文件恢复数据。 **AOF 持久化:** * 将每次执行的写命令保存到硬盘文件中。 * 当需要恢复数据时,重新执行 AOF 文件中的命令。 **RDB 持久化的优点:** * 紧凑的 RDB 文件节省内存空间。 * 在恢复大数据集时速度快于 AOF。 * 适合全量备份和复制。 **RDB 的缺点:** * 服务器宕机时可能会丢失部分数据。 * 每次保存 RDB 文件时,Redis fork出一个子进程。 **AOF 持久化的优点:** * 数据更加完整,丢失数据的可能性降低。 * AOF日志文件可读,可以对 AOF 文件进行修复。 **AOF 的缺点:** * 恢复备份速度慢。 * 恢复备份需要定期对 AOF日志进行瘦身处理。

正文

持久化的功能: Redis是内存数据库, 数据都是存储在内存中, 为了避免进程退出导致数据的永久丢失, 需要定期将Redis中的数据以某种形式(数据或命令) 从内存保存到硬盘。 当下次Redis重启时, 利用持久化文件实现数据恢复。 除此之外, 为了进行灾难备份, 可以将持久化文件拷贝到一个远程位置。 Redis持久化分为 RDB 持久化和 AOF 持久化, 前者将当前数据保存到硬盘, 后者则是将每次执行的写命令保存到硬盘。(rdb保存的是数据,aof保存的是命令)。

RDB持久化:

RDB是一种快照存储持久化方式, 具体就是将Redis某一时刻的内存数据保存到硬盘的文件当中, 默认保存的文件名为dump.rdb, 而在Redis服务器启动时, 会重新加载dump.rdb文件的数据到内存当中恢复数据。 触发 RDB 持久化过程分为手动触发和自动触发。

服务器配置自动触发

# 默认的设置为:

save 900 1

save 300 10

save 60 10000

# 以下设置方式为关闭RDB快照功能

save ""

以上三项默认信息设置代表的意义是:

  • 如果900秒内有1条Key信息发生变化,则进行快照;
  • 如果300秒内有10条Key信息发生变化,则进行快照;
  • 如果60秒内有10000条Key信息发生变化,则进行快照。读者可以按照这个规则,根据自己的实际请求压力进行设置调整。
  • 其它相关配置

# 文件名称
dbfilename dump.rdb

# 文件保存路径
dir ./

# 如果持久化出错,主进程是否停止写入
stop-writes-on-bgsave-error yes

# 是否压缩
rdbcompression yes

# 导入时是否检查
rdbchecksum yes

AOF持久化

 AOF(Append Only File)持久化是把每次写命令追加写入日志中,当需要恢复数据时重新执行AOF文件中的命令就可以了。AOF解决了数据持久化的实时性,也是目前主流的Redis持久化方式。

开启 AOF 功能需要设置配置: appendonly yes, 默认不开启。 AOF 文件名通过 appendfilename 配置设置, 默认文件名是 appendonly.aof。 保存路径同RDB 持久化方式一致, 通过 dir 配置指定

 持久化配置:

appendonly yes #启用aof持久化方式

appendfsync always #每次收到写命令就立即强制写入磁盘, 最慢的大概只有几百的TPS, 但是保证完全的持久化, 不推荐使用

appendfsync everysec #每秒钟强制写入磁盘一次, 在性能和持久化方面做了很好的折中, 推荐 appendfsync no #完全依赖os, 性能最好,持久化没保证, Redis不会主动调用fsync去将AOF日志内容同步到磁盘, 所以这一切就完全依赖于操作系统的调试了。 对大多数Linux操作系统, 是每30秒进行一次fsync, 将缓冲区中的数据写到磁盘上。

 

RDB和AOF对比

RDB的优点:

  1. RDB文件非常紧凑,节省内存空间;
  2. RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快;
  3. 适合全量备份、全量复制的场景,经常用于灾难恢复(对数据的完整性和一致性要求相对较低的场合)

RDB的缺点:

  1. 服务器宕机时,可能会丢失部分数据;
  2. 每次保存RDB的时候,Redis都要fork出一个子进程,这个过程是阻塞的,如果数据集巨大,那阻塞的时间就会很长。

AOF的优点:

  1. 数据更加完整,丢失数据的可能性较低;
  2. AOF日志文件可读,并且可以对AOF文件修复。

AOF的缺点:

  1. AOF日志记录在长期运行中逐渐庞大,恢复起来非常耗时,需要定期对AOF日志进行瘦身处理;
  2. 恢复备份速度比较慢。
文章知识点与官方知识档案匹配,可进一步学习相关知识

与[转帖]Redis持久化-RDB和AOF相似的内容:

[转帖]Redis持久化-RDB和AOF

持久化的功能: Redis是内存数据库, 数据都是存储在内存中, 为了避免进程退出导致数据的永久丢失, 需要定期将Redis中的数据以某种形式(数据或命令) 从内存保存到硬盘。 当下次Redis重启时, 利用持久化文件实现数据恢复。 除此之外, 为了进行灾难备份, 可以将持久化文件拷贝到一个远程位置

[转帖]redis 持久化方式 - aof 和 rdb 区别

https://wenfh2020.com/2020/04/01/redis-persistence-diff/ aof 和 rdb 是 redis 持久化的两种方式。我们看看它们的特点和具体应用场景区别。 1. 持久化特点 1.1. aof 1.2. rdb 2. 使用场景区别 3. 持久化详细文

[转帖]Redis 运维实战 第04期:AOF 持久化

Redis 运维实战 第04期:AOF 持久化 https://cloud.tencent.com/developer/article/1986824 Redis 有两种持久化方式:AOF 和 RDB。本节就先来聊聊 AOF。 AOF(Append Only File) 日志是写后日志,Redis

[转帖]Redis持久化文件RDB的格式解析

http://www.innereye.cn/2017/01/17/redis/Redis_RDB_File_Format_20170117/ 本文可转载演绎,但需要注明原作者和本文链接。 By BaiFan 发表于 2017-01-17 文章目录 1. Redis RDB文件格式 2. 解析RBD

[转帖]Redis 运维实战 第05期:RDB 持久化

https://cloud.tencent.com/developer/article/1986826 前面一节,我们聊了 AOF,AOF 有个不足点就是:进行数据恢复时,需要逐一把日志都执行一遍,非常耗时间。 Redis 还有另外一种持久化方法:内存快照。指内存中的数据在某一时刻的状态记录,这个快

[转帖]深入理解Redis的持久化

https://www.cnblogs.com/ivictor/p/9749465.html RDB RDB是将当前数据生成快照保存到硬盘上。 RDB的工作流程: 1. 执行bgsave命令,Redis父进程判断当前是否存在正在执行的子进程,如RDB/AOF子进程,如果存在bgsave命令直接返回。

[转帖]Redis各版本特性汇总

redis4redis5redis6redis6.2重大特性1.模块系统 2.PSYNC2 3.LFU淘汰策略 4.混合RDB-AOF持久化 5.LAZY FREE延迟释放 6.MEMORY内存分析命令 7.支持NAT/DOCKER 8.主动碎片整理 1.新增Stream数据类型 2.新增Redis

[转帖]Redis各版本特性汇总

redis4redis5redis6redis6.2重大特性1.模块系统 2.PSYNC2 3.LFU淘汰策略 4.混合RDB-AOF持久化 5.LAZY FREE延迟释放 6.MEMORY内存分析命令 7.支持NAT/DOCKER 8.主动碎片整理 1.新增Stream数据类型 2.新增Redis

[转帖]Redis数据库的备份与恢复

Redis备份 当程序有较多的任务在执行时,我们可以redis-cli模式下执行 bgsave,进入后台进行备份. Snapshot 当然我们可以直接运行save命令.会写入dump.rdb文件。 配置说明: save 900 1 #当900秒之后有一个key变化进行持久化保存 save 300 1

[转帖]Redis 持久化原理和实现

https://juejin.cn/post/6877763937513766919 Redis 所有的数据和状态存储在内存中,为了避免进程退出而导致数据丢失,需要将数据和状态保存到硬盘上。 为了达到这一目的,通常有两种实现方式: 将 Redis 当作一个状态机,记录每一次的对 Redis 的操作,