当前位置:网站首页>RDB和AOF的优缺点
RDB和AOF的优缺点
2022-07-23 03:38:00 【java塑造中...】
Redis提供了不同级别的持久化方式:
RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储.
·AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾.Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大.
·如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化方式.
·你也可以同时开启两种持久化方式,在这种情况下,当redis重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整.
·最重要的事情是了解RDB和AOF持久化方式的不同,让我们以RDB持久化方
式开始:
RDB
RDB的优点:
·RDB是一个非常紧凑的文件,它保存了某个时间点得数据集,非常适用于数据集的备份,比如你可以在每个小时报保存一下过去24小时内的数据,同时每天保存过去30天的数据,这样即使出了问题你也可以根据需求恢复到不同版本的数据集.
·RDB是一个紧凑的单一文件,很方便传送到另一个远端数据中心或者亚马逊的S3(可能加密),非常适用于灾难恢复.
·RDB在保存RDB文件时父进程唯一需要做的就是fork出一个子进程,接下来的工作全部由子进程来做,父进程不需要再做其他lO操作,所以RDB持久化方式可以最大化redis的性能.
·与AOF相比,在恢复大的数据集的时候,RDB方式会更快一些.
RDB的缺点:·
如果你希望在redis意外停止工作(例如电源中断)的情况下丢失的数据最少的话,那么RDB不适合你.虽然你可以配置不同的save时间点(例如每隔5分钟并且对数据集有100个写的操作),是Redis要完整的保存整个数据集是一个比较繁重的工作,你通常会每隔5分钟或者更久做一次完整的保存,万一在Redis意外宕机,你可能会丢失几分钟的数据.
·RDB需要经常fork子进程来保存数据集到硬盘上,当数据集比较大的时候fork的过程是非常耗时的,可能会导致Redis在一些毫秒级内不能响应客户端的请求.如果数据集巨大并且CPU性能不是很好的情况下,这种情况会持续1秒,AOF也需要fork,但是你可以调节重写日志文件的频率来提高数据集的耐久度.
AOF
AOF的优点:
·使用AOF会让你的Redis更加耐久:你可以使用不同的fsync策略:无fsync,每秒fsync,每次写的时候fsync.使用默认的每秒fsync策略,Redis的性能依然很好(fsync是由后台线程进行处理的,主线程会尽力处理客户端请求),一旦出现故障,你最多丢失1秒的数据.
·AOF文件是一个只进行追加的日志文件,所以不需要写入seek,即使由于某些原因(磁盘空间已满,写的过程中宕机等等)未执行完整的写入命令,你也也可使用redis-check-aof工具修复这些问题.
·Redis可以在AOF文件体积变得过大时,自动地在后台对AOF进行重写:重写后的新AOF文件包含了恢复当前数据集所需的最小命令集合。整个重写操作是绝对安全的,因为Redis在创建新AOF文件的过程中,会
继续将命令追加到现有的AOF文件里面,即使重写过程中发生停机,现有的AOF文件也不会丢失。而一旦新AOF文件创建完毕,Redis就会从日AOF文件切换到新AOF文件,并开始对新AOF文件进行追加操作。
·AOF文件有序地保存了对数据库执行的所有写入操作,这些写入操作以Redis 协议的格式保存,因此AOF文件的内容非常容易被人读懂,对文件进行分析(parse)也很轻松。导出
(export)AOF文件也非常简
单:举个例子,如果你不小心执行了FLUSHALL命令,但只要AOF文件未被重写,那么只要停止服务器,移除AOF文件末尾的FLUSHALL 命令,并重启Redis,就可以将数据集恢复到FLUSHALL执行之前的状态。
AOF的缺点:
·对于相同的数据集来说,AOF 文件的体积通常要大于RDB文件的体积。
·根据所使用的fsync策略,AOF的速度可能会慢于RDB。在一般情况下,每秒fsync的性能依然非常高,而关闭fsync可以让AOF的速度和RDB一样快,即使在高负荷之下也是如此。不过在处理巨大的写入载入时,RDB可以提供更有保证的最大延迟时间(latency)。
边栏推荐
- mysql三表查询问题
- 专题训练-链表
- Qt报错:错误 C2039 “Value“: 不是 “`global namespace‘“ 的成员
- 金仓数据库 KingbaseES SQL 语言参考手册 (8. 函数(三))
- C language flexible array
- Android development learning diary - content provider (cross application database modification)
- GNN-第三方库:PyG(Pytorch Geometric)【基于Pytorch构建的库,可以帮助用户快速构建和训练自己的图神经网络模型】【DeepWalk、LINE、GCN、GAT等】
- [summary]
- moment 获取周、月、季、年
- [C language foundation] 16 variable array (array length can be extended)
猜你喜欢

Network communication principle and IP address allocation principle. The seven layers of the network are physical layer, data link layer, network layer, transmission layer, session layer, presentation

Decompile the jar package / class file / modify the jar package using the decompile plug-in of idea

Android development learning diary - content provider (cross application database modification)

世界正在被开源软件吞食

L-cysteine modified gold nanoparticles (Cys GNPs) and bovine serum albumin / biotinylated albumin nanoparticles

mysql三表查询问题

Error msb4181: the "qtrunwork" task returned false, but no error was recorded

从业务开发中学习和理解架构设计

leetcode-99.恢复二叉搜索树

EasyCVR平台CGO回放回调参数缺失导致设备录像无法播放,该如何解决?
随机推荐
Jeecgboot import document
【C语言基础】16 可变数组(数组长度可扩展)
EasyCVR平台升级到最新版本v2.5.0,如何同步mysql数据库?
[azure event center] try new functions of azure event hub -- geo disaster recovery
leetcode 1074. Number of Submatrices That Sum to Target(和为target的子矩阵个数)
Android开发学习日记--内容提供者(跨应用间的数据库修改)
数据中台、BI业务访谈(三):如何选择合适的访谈对象
MySQL基础篇(运算符、排序分页、多表查询、函数)
范式及反范式
SSM framework takeout ordering system
Target detection XML file to achieve mixup data enhancement (modifying the file path can be used directly, which is very convenient)
射频电路循证设计
MySQL three table query problem
JS div scroll to the bottom
Time series - third party Library: tsfresh [feature extraction, feature selection]
QT error: error c2039 "value": not a member of "`global namespace"
七大排序--万字详解
A brief tutorial for soft exam system architecture designer | requirements engineering
C language -- several classic exercises of C language
C语言——几道C语言经典习题