iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Redis两种持久化方案RDB和AOF详解
  • 717
分享到

Redis两种持久化方案RDB和AOF详解

两种详解持久 2022-06-04 18:06:37 717人浏览 安东尼
摘要

本文主要针对Redis 有两种持久化方案RDB和AOF做了详细的分析,希望我们整理的内容能够帮助大家对这个两种方案有更加深入的理解。 Redis 有两种持久化方案,RDB (Redis DataBase)和

本文主要针对Redis 有两种持久化方案RDB和AOF做了详细的分析,希望我们整理的内容能够帮助大家对这个两种方案有更加深入的理解。

Redis 有两种持久化方案,RDB (Redis DataBase)和 AOF (Append Only File)。如果你想快速了解和使用RDB和AOF,可以直接跳到文章底部看总结。本章节通过配置文件,触发快照的方式,恢复数据的操作,命令操作演示,优缺点来学习 Redis 的重点知识持久化。

RDB 详解

RDB 是 Redis 默认的持久化方案。在指定的时间间隔内,执行指定次数的写操作,则会将内存中的数据写入到磁盘中。即在指定目录下生成一个dump.rdb文件。Redis 重启会通过加载dump.rdb文件恢复数据。

从配置文件了解RDB

打开 redis.conf 文件,找到 SNAPSHOTTING 对应内容
1 RDB核心规则配置(重点)


save <seconds> <changes>
# save ""
save 900 1
save 300 10
save 60 10000

解说:save <指定时间间隔> <执行指定次数更新操作>,满足条件就将内存中的数据同步到硬盘中。官方出厂配置默认是 900秒内有1个更改,300秒内有10个更改以及60秒内有10000个更改,则将内存中的数据快照写入磁盘。

若不想用RDB方案,可以把 save "" 的注释打开,下面三个注释。

2 指定本地数据库文件名,一般采用默认的 dump.rdb


dbfilename dump.rdb

3 指定本地数据库存放目录,一般也用默认配置

dir ./

4 默认开启数据压缩


rdbcompression yes

解说:配置存储至本地数据库时是否压缩数据,默认为yes。Redis采用LZF压缩方式,但占用了一点CPU的时间。若关闭该选项,但会导致数据库文件变的巨大。建议开启。

触发RDB快照

1 在指定的时间间隔内,执行指定次数的写操作

2 执行save(阻塞, 只管保存快照,其他的等待) 或者是bgsave (异步)命令

3 执行flushall 命令,清空数据库所有数据,意义不大。

4 执行shutdown 命令,保证服务器正常关闭且不丢失任何数据,意义...也不大。

通过RDB文件恢复数据

将dump.rdb 文件拷贝到redis的安装目录的bin目录下,重启redis服务即可。在实际开发中,一般会考虑到物理机硬盘损坏情况,选择备份dump.rdb 。可以从下面的操作演示中可以体会到。

RDB 的优缺点

优点:

1 适合大规模的数据恢复。

2 如果业务对数据完整性和一致性要求不高,RDB是很好的选择。

缺点:

1 数据的完整性和一致性不高,因为RDB可能在最后一次备份时宕机了。

2 备份时占用内存,因为Redis 在备份时会独立创建一个子进程,将数据写入到一个临时文件(此时内存中的数据是原来的两倍哦),最后再将临时文件替换之前的备份文件。

所以Redis 的持久化和数据的恢复要选择在夜深人静的时候执行是比较合理的。

操作演示


[root@itdraGon bin]# vim redis.conf
save 900 1
save 120 5
save 60 10000
[root@itdragon bin]# ./redis-server redis.conf
[root@itdragon bin]# ./redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set key1 value1
OK
127.0.0.1:6379> set key2 value2
OK
127.0.0.1:6379> set key3 value3
OK
127.0.0.1:6379> set key4 value4
OK
127.0.0.1:6379> set key5 value5
OK
127.0.0.1:6379> set key6 value6
OK
127.0.0.1:6379> SHUTDOWN
not connected> QUIT
[root@itdragon bin]# cp dump.rdb dump_bk.rdb
[root@itdragon bin]# ./redis-server redis.conf
[root@itdragon bin]# ./redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> FLUSHALL 
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> SHUTDOWN
not connected> QUIT
[root@itdragon bin]# cp dump_bk.rdb dump.rdb
cp: overwrite `dump.rdb'? y
[root@itdragon bin]# ./redis-server redis.conf
[root@itdragon bin]# ./redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> keys *
1) "key5"
2) "key1"
3) "key3"
4) "key4"
5) "key6"
6) "key2"

第一步:vim 修改持久化配置时间,120秒内修改5次则持久化一次。

第二步:重启服务使配置生效。

第三步:分别set 5个key,过两分钟后,在bin的当前目录下会自动生产一个dump.rdb文件。(set key6 是为了验证shutdown有触发RDB快照的作用)

第四步:将当前的dump.rdb 备份一份(模拟线上工作)。

第五步:执行FLUSHALL命令清空数据库数据(模拟数据丢失)。

第六步:重启Redis服务,恢复数据.....咦????( ′◔ ‸◔`)。数据是空的????这是因为FLUSHALL也有触发RDB快照的功能。

第七步:将备份的 dump_bk.rdb 替换 dump.rdb 然后重新Redis。

注意点:SHUTDOWN 和 FLUSHALL 命令都会触发RDB快照,这是一个坑,请大家注意。

其他命令:

keys * 匹配数据库中所有 key save 阻塞触发RDB快照,使其备份数据 FLUSHALL 清空整个 Redis 服务器的数据(几乎不用) SHUTDOWN 关机走人(很少用)

AOF 详解

AOF :Redis 默认不开启。它的出现是为了弥补RDB的不足(数据的不一致性),所以它采用日志的形式来记录每个写操作,并追加到文件中。Redis 重启的会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。

从配置文件了解AOF

打开 redis.conf 文件,找到 APPEND ONLY MODE 对应内容
1 redis 默认关闭,开启需要手动把no改为yes


appendonly yes

2 指定本地数据库文件名,默认值为 appendonly.aof


appendfilename "appendonly.aof"

3 指定更新日志条件


# appendfsync always
appendfsync everysec
# appendfsync no

解说:

always:同步持久化,每次发生数据变化会立刻写入到磁盘中。性能较差当数据完整性比较好(慢,安全

everysec:出厂默认推荐,每秒异步记录一次(默认值)

no:不同步

4 配置重写触发机制


auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

解说:当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发。一般都设置为3G,64M太小了。

触发AOF快照

根据配置文件触发,可以是每次执行触发,可以是每秒触发,可以不同步。

根据AOF文件恢复数据

正常情况下,将appendonly.aof 文件拷贝到redis的安装目录的bin目录下,重启redis服务即可。但在实际开发中,可能因为某些原因导致appendonly.aof 文件格式异常,从而导致数据还原失败,可以通过命令redis-check-aof --fix appendonly.aof 进行修复 。从下面的操作演示中体会。

AOF的重写机制

前面也说到了,AOF的工作原理是将写操作追加到文件中,文件的冗余内容会越来越多。所以聪明的 Redis 新增了重写机制。当AOF文件的大小超过所设定的阈值时,Redis就会对AOF文件的内容压缩。

重写的原理:Redis 会fork出一条新进程,读取内存中的数据,并重新写到一个临时文件中。并没有读取旧文件(你都那么大了,我还去读你??? o(゚Д゚)っ傻啊!)。最后替换旧的aof文件。

触发机制:当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发。这里的“一倍”和“64M” 可以通过配置文件修改。

AOF 的优缺点

优点:数据的完整性和一致性更高

缺点:因为AOF记录的内容多,文件会越来越大,数据恢复也会越来越慢。

操作演示


[root@itdragon bin]# vim appendonly.aof
appendonly yes
[root@itdragon bin]# ./redis-server redis.conf
[root@itdragon bin]# ./redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set keyAOf valueAof
OK
127.0.0.1:6379> FLUSHALL 
OK
127.0.0.1:6379> SHUTDOWN
not connected> QUIT
[root@itdragon bin]# ./redis-server redis.conf
[root@itdragon bin]# ./redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> keys *
1) "keyAOf"
127.0.0.1:6379> SHUTDOWN
not connected> QUIT
[root@itdragon bin]# vim appendonly.aof
fjewofjwojfoewifjowejfwf
[root@itdragon bin]# ./redis-server redis.conf
[root@itdragon bin]# ./redis-cli -h 127.0.0.1 -p 6379
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected> QUIT
[root@itdragon bin]# redis-check-aof --fix appendonly.aof 
'x    3e: Expected prefix '*', got: '
AOF analyzed: size=92, ok_up_to=62, diff=30
This will shrink the AOF from 92 bytes, with 30 bytes, to 62 bytes
Continue? [y/N]: y
Successfully truncated AOF
[root@itdragon bin]# ./redis-server redis.conf
[root@itdragon bin]# ./redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> keys *
1) "keyAOf"

第一步:修改配置文件,开启AOF持久化配置。

第二步:重启Redis服务,并进入Redis 自带的客户端中。

第三步:保存值,然后模拟数据丢失,关闭Redis服务。

第四步:重启服务,发现数据恢复了。(额外提一点:有教程显示FLUSHALL 命令会被写入AOF文件中,导致数据恢复失败。我安装的是redis-4.0.2没有遇到这个问题)。

第五步:修改appendonly.aof,模拟文件异常情况。

第六步:重启 Redis 服务失败。这同时也说明了,RDB和AOF可以同时存在,且优先加载AOF文件。

第七步:校验appendonly.aof 文件。重启Redis 服务后正常。

补充点:aof 的校验是通过 redis-check-aof 文件,那么rdb 的校验是不是可以通过 redis-check-rdb 文件呢???

总结 Redis 默认开启RDB持久化方式,在指定的时间间隔内,执行指定次数的写操作,则将内存中的数据写入到磁盘中。 RDB 持久化适合大规模的数据恢复但它的数据一致性和完整性较差。 Redis 需要手动开启AOF持久化方式,默认是每秒将写操作日志追加到AOF文件中。

AOF 的数据完整性比RDB高,但记录内容多了,会影响数据恢复的效率。 Redis 针对 AOF文件大的问题,提供重写的瘦身机制。若只打算用Redis 做缓存,可以关闭持久化。若打算使用Redis 的持久化。建议RDB和AOF都开启。其实RDB更适合做数据的备份,留一后手。AOF出问题了,还有RDB。

到这里Redis 的持久化就介绍完了,有什么不对的地方可以指出。

您可能感兴趣的文档:

--结束END--

本文标题: Redis两种持久化方案RDB和AOF详解

本文链接: https://www.lsjlt.com/news/13149.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Redis RDB与AOF持久化方式详细讲解
    目录1.RDB持久化1.1 RDB文件的保存1.2 RDB文件的载入1.3 RDB持久化时服务器的状态1.4 RDB持久化策略2.AOF持久化2.1 持久化的实现2.2 文件的载入与数据还原2.3 AOF文件的重写1.R...
    99+
    2022-11-22
    RedisRDB与AOF Redis持久化方式
  • 怎么掌握Redis持久化RDB和AOF
    本篇内容介绍了“怎么掌握Redis持久化RDB和AOF”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、为...
    99+
    2024-04-02
  • Redis 持久化 RDB 与 AOF的执行过程
    目录前言一、RDB1. save 命令2. bgsave 命令3. 内部触发 RDB 场景4. RDB 参数配置5. RDB 缺点二、AOF1. 参数配置2. AOF 执行流程3. ...
    99+
    2024-04-02
  • 如何进行Redis持久化RDB和AOF的分析
    如何进行Redis持久化RDB和AOF的分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Redis持久化方案Redis是内存数据库,数据都是...
    99+
    2024-04-02
  • Redis中RDB和AOF持久化模式缺陷是什么
    这篇文章主要介绍了Redis中RDB和AOF持久化模式缺陷是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、RDB持久化模式缺陷1、问...
    99+
    2024-04-02
  • redis中RDB和AOF持久化的优缺点是什么
    小编给大家分享一下redis中RDB和AOF持久化的优缺点是什么,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Redis 提供了 RDB 和 AOF 两种持久化方案:RDB:生成指定时间间...
    99+
    2024-04-02
  • Redis的持久化机制采用RDB还是AOF
    这篇文章主要讲解了“Redis的持久化机制采用RDB还是AOF”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Redis的持久化机制采用RDB还是AOF”吧!...
    99+
    2024-04-02
  • 图解Redis,谈谈Redis的持久化,RDB快照与AOF日志
    目录 专栏导读 一、RDB持久化 1、自动触发 2、手动触发 3、设置保存条件 4、加解密 5、R...
    99+
    2023-09-21
    redis 数据库 分布式
  • Redis中AOF与RDB持久化策略深入分析
    目录写在前面一、Redis为什么要持久化二、Redis的持久化方式2.1. AOF持久化(Append of file)2.1.1 fsync 系统调用2.1.2 AOF持久化策略2.1.3 aof_rewrite2.2...
    99+
    2022-11-28
    Redis持久化策略 RedisAOF RedisRDB
  • 【Redis】Redis持久化之AOF详解(Redis专栏启动)
    📫作者简介:小明java问道之路,2022年度博客之星全国TOP3,专注于后端、中间件、计算机底层、架构设计演进与稳定性建工设优化。文章内容兼具广度深度、大厂技术方案,对待技术喜欢推理加验证,就职于知名金融公司后端高级...
    99+
    2023-09-05
    redis 缓存 数据库 java AOF
  • redis中RDB和AOP持久化是什么
    小编给大家分享一下redis中RDB和AOP持久化是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!redis是一个内存数据库...
    99+
    2024-04-02
  • redis的两种持久化方式是什么
    Redis有两种持久化方式,分别是RDB持久化和AOF持久化。 RDB持久化:RDB持久化是将Redis在内存中的数据以快照的形...
    99+
    2024-04-22
    redis
  • redis的2种持久化方案深入讲解
    前言 Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。有字符串,链表,集 合和有序集合。支持在服务器端计算集合的并,交和补集(dif...
    99+
    2024-04-02
  • Redis中的两种持久化方式是什么
    本篇内容主要讲解“Redis中的两种持久化方式是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Redis中的两种持久化方式是什么”吧!Redis的两种持久化...
    99+
    2024-04-02
  • vuex数据持久化的两种实现方案
    目录业务需求: 方案一:vuex-persistedstate方案二:vuex-persist总结 业务需求: 在基于vue开发SPA项目时,为了解决页面刷新后数据丢失的问题,我们...
    99+
    2024-04-02
  • redis两种持久化方式的区别有哪些
    这篇文章主要介绍redis两种持久化方式的区别有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! redis提供两种方式进行持久化,一种是RDB持久化(原理是将Reids...
    99+
    2024-04-02
  • Redis的持久化详解
    目录一、Redis的持久化二、RDB(Redis DataBase)1、RDB快照原理2、RDB配置3、redis.conf 其他一些配置4、RDB的备份恢复5、RDB优缺点三、AOF(Append Of File)1、...
    99+
    2023-06-05
    Redis持久化详解 Redis 持久化
  • 持久化redis有几种方式
    这篇文章主要介绍了持久化redis有几种方式,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。持久化redis有几种方式?答:主要有两种方式:1...
    99+
    2024-04-02
  • redis两种持久化方式的优缺点是什么
    这篇文章给大家分享的是有关redis两种持久化方式的优缺点是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 redis两种持久化的方式RDB持久化...
    99+
    2024-04-02
  • 关于Redis数据库三种持久化方案介绍
    目录一、回顾Redis二、方案一:bgsave三、方案二:配置文件rdb四、方案三:aof总结一、回顾Redis 1、redis的特点 redis是一个内存中的数据结构存储系统。优点...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作