详解Redis中的rdb和aof区别以及实现方式

什么是持久化存储?为什么要持久化存储?

持久化是把当前redis中全部数据生成快照或者数据文件保存在硬盘上。

redis是内存数据库,保存在服务器内存中,如果你的redis进程意外关闭、服务器意外宕机那么你所存储的数据将无法恢复,所以redis提供了持久化的存储方式,redis默认使用了RDB的持久化存储方式,可以在目录中看到dump.rdb文件。

持久化存储RDB和AOF的区别

RDB持久化 

RDB(Redis DataBase)持久化是把当前redis中全部数据生成快照保存在硬盘上,命令有两个save(会阻塞redis服务,直到RDB持久化完成。当redis服务储存大量数据时,会造成较长时间的阻塞,不建议使用)和bgsave(redis进程会执行fork操作创建子进程,RDB持久化由子进程负责,不会阻塞Redis服务进程。redis服务的阻塞只发生在fork阶段,一般情况时间很短),可以手动触发,也可以自动触发

手动触发

#:0>save
"OK"
#:0>bgsave
"Background saving started"
#:0>

自动触发

#执行出错终止执行
stop-writes-on-bgsave-error yes

#rdb压索 是
rdbcompression yes

#rdb检查 是
rdbchecksum yes

#redis默认设置:
#3600秒(一小时)后,如果至少更换了一把钥匙
#*300秒(5分钟)后,如果至少更换了100把钥匙
#*60秒后,如果至少更改了10000个键 会触发自动持久化bgsave
#保存   秒        改变
save <seconds> <changes>
# save 3600 1   
# save 300 100
# save 60 10000

#可以通过设置空字符串取消自动触发快照
save ""

RDB的优点与缺点

RDB文件是一个紧凑的二进制压缩文件,是Redis在某个时间点的全部数据快照。所以使用RDB恢复数据的速度远远比AOF的快,非常适合备份、全量复制、灾难恢复等场景。

每次进行bgsave操作都要执行fork操作创建子经常,属于重量级操作,频繁执行成本过高,所以无法做到实时持久化,或者秒级持久化,另外,由于redis版本的不断迭代,存在不同格式的RDB版本,有可能出现低版本的RDB格式无法兼容高版本RDB文件的问题。

AOF持久化

AOF(Append Only File)持久化是把每次写命令追加写入日志中,当需要恢复数据时重新执行AOF文件中的命令就可以了。AOF解决了数据持久化的实时性,也是目前主流的redis持久化方式。如果AOF文件大于64mb,fork一个新的进程将文件进行重写,AOF默认文件无限追加,文件会越来越大,可以手动触发,也可以自动触发。

手动触发

a:0>bgrewriteaof

"Background append only file rewriting started"
a:0>

自动触发

#是否开启aof
appendonly yes

# The name of the append only file (default: "appendonly.aof")

#aof文件名称
appendfilename "appendonly.aof"

#重写策略 默认为everysec
#always:每次写入缓存区都要同步到AOF文件中,硬盘的操作比较慢,限制了Redis高并发,不建议配置。
#no:每次写入缓存区后不进行同步,同步到AOF文件的操作由操作系统负责,每次同步AOF文件的周期不可控,而且增大了每次同步的硬盘的数据量。
#eversec:每次写入缓存区后,由专门的线程每秒钟同步一次,做到了兼顾性能和数据安全。是建议的同步策略,
appendfsync everysec

#当AOF fsync策略设置为always或everysec时,背景
#保存过程(后台保存或AOF日志后台重写)为
#在某些Linux配置中,对磁盘执行大量I/O
#Redis可能会在fsync()调用上阻塞太长时间。请注意,没有修复
#目前,即使在不同的线程中执行fsync,也会阻塞
#我们的同步写入(2)调用。

#为了缓解此问题,可以使用以下选项
#这将防止在主进程中调用fsync(),而
#正在进行BGSAVE或BGREWRITEAOF。

#这意味着,当另一个孩子在储蓄时,Redis的耐用性是
#与“appendfsync none”相同。实际上,这意味着
#在最坏的情况下,可能会丢失长达30秒的日志(使用
#默认Linux设置)。

#如果您有延迟问题,请将此设置为“是”。否则就按原样处理
#“不”,从耐久性的角度来看,这是最安全的选择。
no-appendfsync-on-rewrite no

#自动重写仅附加文件。
#Redis能够自动重写隐式调用的日志文件
#BGREWRITEAOF当AOF日志大小按指定百分比增长时。
#其工作原理如下:Redis在
#最新重写(如果重新启动后没有发生重写,则
#使用启动时的AOF)。
#将此基本大小与当前大小进行比较。如果当前大小为
#大于指定百分比时,将触发重写。而且
#您需要指定要重写的AOF文件的最小大小
#有助于避免重写AOF文件,即使百分比增加
#已到达,但仍然很小。

auto-aof-rewrite-percentage 100  #运行AOF重写时AOF文件大小的增长率的最小值
auto-aof-rewrite-min-size 64mb   #运行AOF重写时文件大小的最小值

AOF的优点与缺点

AOF可以恢复redis的所有数据,每秒同步一次,可能会丢失1秒数据。

对于数据文件来说,AOF远远大于RDB,修复的速度也比RDB慢,AOF运行效率比RDB慢,所以redis默认RDB持久化

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RedisRDBAOF是两种不同的持久化机制。RDB全称Redis Database Backup file,它是将内存的所有数据记录在磁盘上的快照文件。当Redis实例故障重启后,可以从磁盘RDB文件读取数据来进行恢复。RDB文件默认保存在当前运行目录,每次触发RDB时会生成一个新的RDB文件来覆盖旧文件,以保证备份数据的最新性。 AOF全称Append Only File,它是将Redis的操作以日志的形式追加到文件AOF文件的保存路径与RDB的路径一致。如果同时开启了RDBAOFRedis会优先根据AOF文件来进行数据恢复。 RDBAOF的目的都是为了将Redis的数据持久化到磁盘,以防止数据丢失。因为Redis的数据是基于内存的,一旦服务器断电或宕机,数据就会直接丢失。通过使用RDBAOF,可以在Redis实例故障重启后,根据备份文件进行数据恢复。 总结来说,RDB是将内存的数据直接拷贝到文件持久化方式,而AOF是将Redis的操作以日志的形式追加到文件持久化方式。根据配置的不同,可以选择使用RDBAOF或同时使用两者来实现数据持久化。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span> #### 引用[.reference_title] - *1* *4* [详解RedisRDBAOF](https://blog.csdn.net/u014225032/article/details/125856164)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Redis持久化的两种方式RDBAOF详解)](https://blog.csdn.net/starboyxyh/article/details/127503310)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值