Redis中RDB和AOF持久化区别和联系

RDB和AOF持久化

 

?RDB持久化

RDB是什么?

原理是redis会单独创建(fork) 一个与当前进程一模一 样的子进程来进行持久化,这个子进程的所有数据(变量。环境变量,程序程序计数器等)都和原进程一模一 样,会先将数据写入到一个临时文件中,待持久化结束了,再用这个临时文件替换上次持久化好的文件,整个过程中,主进程不进行任何的io操作,这就确保了极高的性能

1.这个持久化文件在哪里

RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘。也是默认的持久化方式,这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。

2. 触发机制

既然RDB机制是通过把某个时刻的所有数据生成一个快照来保存,那么就应该有一种触发机制,是实现这个过程。对于RDB来说,提供了三种机制:save、bgsave、自动化。我们分别来看一下

save:该命令会阻塞当前Redis服务器,执行save命令期间,Redis不能处理其他命令,直到RDB过程完成为止

bgsave:该命令是非阻塞,后台持久化数据,Redis会在后台异步进行快照操作,不影响写操作。

自动化:

在redis.conf配置文件中,里面有如下配置,我们可以去设置:

默认如下配置:

#表示900秒内如果至少有1个key的值变化,则保存save9001#表示300秒内如果至少有10个key的值变化,则保存save30010#表示60秒内如果至少有10000个key的值变化,则保存save6010000

不需要持久化,那么你可以注释掉所有的 save 行来停用保存功能。

RDB 的优势和劣势:

  1. 容易丢失数据,最高可能丢失59秒数据,当save6010000命令:突然断电,可能会丢失前59s持久化的临时数据文件
  2. RDB文件紧凑,全量备份,占用空间少。

AOF原理:

全量备份总是耗时的,有时候我们提供一种更加高效的方式AOF,工作机制很简单,redis会将每一个收到的写命令都通过write函数追加到文件中。通俗的理解就是日志记录。

1.触发机制(根据配置文件配置项)

appendfsync no:表示等操作系统进行数据缓存同步到磁盘(快, 持久化没保证)

appendfsync always:同步持久化,每次发生数据变更时,立即记录到磁盘(慢, 安全)

appendfsync everysec:表示每秒同步一次(默认值,很快, 但可能会丢失一秒以内的数据)

2.aof重写机制

其实就是瘦身,清除没用的日志记录

AOF的方式也同时带来了另一个问题。持久化文件会变的越来越大。为了压缩aof的持久化文件。redis提供了bgrewriteaof命令。将内存中的数据以命令的方式保存到临时文件中,同时会fork出一条新进程来将文件重写。

重写aof文件的操作,并没有读取旧的aof文件,而是将整个内存中的数据库内容用命令的方式重写了一个新的aof文件,这点和快照有点类似。

什么时候会启动重写机制:

#当AOF文件增长到一定大小的时候Redis能够调用BGREWRITEAOF 对日志文件进行重写。当AOF文件大小的增长率大于该配置项时自动开启重写。

auto一aof一rewrite一percentage 80

#当AOF文件增长到一定大小的时候Redis能够调用BGREWRITEAOF 对日志文件进行重写。当AOF文件大小大于该配置项时自动开启重写

auto一aof一rewrite一min一size 64M(一般的公司最低5G)

3. 优缺点

(1)对于同一份数据来说,AOF日志文件通常比RDB数据快照文件更大

(2)AOF开启后,支持的写QPS会比RDB支持的写QPS低,因为AOF一般会配置成每秒fsync一次日志文件,当然,每秒一次fsync,性能也还是很高的

(3)以前AOF发生过bug,就是通过AOF记录的日志,进行数据恢复的时候,没有恢复一模一样的数据出来。

RDB和AOF最大区别

  rdb:会frok子进程

  aof:不会frok子进程,重写机制会frok子进程

原文地址:https://www.cnblogs.com/rqy0526/p/12346623.html

时间: 2024-11-06 07:28:48

Redis中RDB和AOF持久化区别和联系的相关文章

redis的 rdb 和 aof 持久化的区别 [转]

aof,rdb是两种 redis持久化的机制.用于crash后,redis的恢复. rdb的特性如下: Code: fork一个进程,遍历hash table,利用copy on write,把整个db dump保存下来.save, shutdown, slave 命令会触发这个操作.粒度比较大,如果save, shutdown, slave 之前crash了,则中间的操作没办法恢复. aof有如下特性: Code: 把写操作指令,持续的写到一个类似日志文件里.(类似于从postgresql等数

redis的rdb与aof持久化机制

Redis提供了两种持久化方案:RDB持久化和AOF持久化,一个是快照的方式,一个是类似日志追加的方式 RDB快照持久化 RDB持久化是通过快照的方式,即在指定的时间间隔内将内存中的数据集快照写入磁盘.在创建快照之后,用户可以备份该快照,可以将快照复制到其他服务器以创建相同数据的服务器副本,或者在重启服务器后恢复数据.RDB是Redis默认的持久化方式 save 900 1 当时间到900秒时,如果至少有1个key发生变化,就会自动触发bgsave命令创建快照 save 300 10 当时间到3

redis的 rdb 和 aof 持久化的区别

aof,rdb是两种 redis持久化的机制.用于奔溃后,redis的恢复. rdb的特性如下: Code: fork一个进程,遍历hash table,利用copy on write,把整个db dump保存下来.save, shutdown, slave 命令会触发这个操作.粒度比较大,如果save, shutdown, slave 之前crash了,则中间的操作没办法恢复. aof有如下特性: Code: 把写操作指令,持续的写到一个类似日志文件里.(类似于从postgresql等数据库导

Redis之RDB和AOF持久化介绍

什么是数据库状态 redis是一个键值对的数据库服务器,服务器中通常包含中任意个非空的数据库,而每个数据库又可以包含任意个键值对,为了方便起见,我们将服务器中的非空数据库以及他们的键值对统称为数据库状态. RDB持久化的逻辑 RDB持久化就可以手动执行也可以根据服务器配置选项定期的执行,该功能可以将某个时间点上的数据库状态保存到一个RDB文件中,这个文件其实是一个二进制的文件,通过这个文件可以还原生成RDB文件时的数据库状态. RDB文件的创建 有两个生成redisRDB文件的命令,一个是SAV

Redis 详解 (七) AOF 持久化

目录 1.AOF简介 2.AOF 配置 3.开启 AOF 4.AOF 文件恢复 5. AOF 重写 6.AOF的优缺点 上一篇文章我们介绍了Redis的RDB持久化,RDB 持久化存在一个缺点是一定时间内做一次备份,如果redis意外down掉的话,就会丢失最后一次快照后的所有修改(数据有丢失).对于数据完整性要求很严格的需求,怎么解决呢? 本篇博客接着来介绍Redis的另一种持久化方式——AOF. 回到顶部 1.AOF简介 Redis的持久化方式之一RDB是通过保存数据库中的键值对来记录数据库

redis学习笔记——RDB和AOF持久化

为防止数据丢失,需要将 Redis 中的数据从内存中 dump 到磁盘,这就是持久化.Redis 提供两种持久化方式:RDB 和 AOF.Redis 允许两者结合,也允许两者同时关闭. RDB 可以定时备份内存中的数据集.服务器启动的时候,可以从 RDB 文件中恢复数据集. AOF(append only file) 可以记录服务器的所有写操作.在服务器重新启动的时候,会把所有的写操作重新执行一遍,从而实现数据备份.当写操作集过大(比原有的数据集还大),Redis 会重写写操作集. 值得一提的是

Redis 专题二: RDB 与 AOF 持久化

服务器中的数据库 Redis服务器将所有数据库都保存在服务器状态结构的db数组中,db数组的每个项都是一个RedisDb结构,一个RedisDb结构数组的长度就代表了数据库的个数.默认情况下Redis的目标数据库是0号数据库,但客户端可以通过执行SELECT命令来切换数据库 在服务器内部,客户端状态redisClient结构的db属性记录了客户端当前的目标数据库,这个属性是一个指向RedisDb的指针 typedef struct redisClient{ //... //记录客户端当前正在使用

003.图解分析 redis 的 RDB 和 AOF 两种持久化机制的工作原理

目录 RDB AOF 小结 参考 我们已经知道对于一个企业级的 redis 架构来说,持久化是不可减少的 tip 牢记企业级 redis 集群架构是用来支撑海量数据.高并发.高可用 持久化主要是做灾难恢复.数据恢复,也可以归类到高可用的一个环节里面去 比如你 redis 整个挂了,redis 就不可用了,你要做的事情是让 redis 变得可用,尽快变得可用你会怎么做? 你会重启 redis,尽快让它对外提供服务,但是就像上一讲说,如果你没做数据备份,这个时候 redis 就算启动了,也不可用,数

004.redis 的 RDB 和 AOF 两种持久化机制的优劣势对比

目录 RDB 持久化机制的优点 RDB 持久化机制的缺点 AOF 持久化机制的优点 AOF 持久化机制的缺点 RDB 和 AOF 到底该如何选择 参考 RDB 持久化机制的优点 适合做冷备 RDB 会生成多个数据文件,每个数据文件都代表了某一个时刻中 redis 的数据,这种多个数据文件的方式,非常适合做冷备,可以将这种完整的数据文件发送到一些远程的安全存储上去,如云上,以预定好的备份策略来定期备份 redis 中的数据 性能影响小 能让 redis 对外提供的读写服务不受影响,因为 redis