玩转redis持久化,阿里架构师给你来一篇方案介绍
2019-08-16 09:23:26来源:博客园 阅读 ()
玩转redis持久化,阿里架构师给你来一篇方案介绍
一、基本介绍
本次演示使用的redis版本是3.2.100,操作系统是win10。
redis支持两种持久化方案,RDB和AOF,前者是默认打开的,后者需要手动开启。我们通过配置文件可以验证这一点,
RDB默认开启
save 900 1 save 300 10 save 60 10000
这三条配置是RDS触发快照的条件,它们的意思分别是:
- 900秒内如果有一条写入,则产生快照
- 300秒内如果有1000次写入,则产生快照
- 60秒内如果有10000次写入,则产生快照
当然,触发rdb快照的条件不止这些,下面会讲到。
AOF默认关闭
appendonly no
二、RDB介绍
RDB的方案是当满足触发条件是,将内存中的数据以二进制的方式写入磁盘保存,默认保存的文件叫dump.rdb(可以改),当redis重启时,会读取该文件进行数据恢复。
查看快照文件的信息
127.0.0.1:6379> config get dbfilename 1) "dbfilename" 2) "dump.rdb" 127.0.0.1:6379> config get dir 1) "dir" 2) "C:\\redis-6379" 127.0.0.1:6379>
触发RDB快照条件
除了上面提到的在指定时间内,指定写次数触发之外,下面几种情况也会触发redis执行RDB快照,
- 手动执行save(同步阻塞)或者bgsave(异步阻塞)命令
- 执行flushall命令
- redis退出,执行shutdown命令
下面拿第一种情况演示下,这里会用到info Persistence命令,用来查看持久化信息。
127.0.0.1:6379> info persistence # Persistence loading:0 rdb_changes_since_last_save:0 rdb_bgsave_in_progress:0 rdb_last_save_time:1561595205 ...省略其它 127.0.0.1:6379> save OK 127.0.0.1:6379> info persistence # Persistence loading:0 rdb_changes_since_last_save:0 rdb_bgsave_in_progress:0 rdb_last_save_time:1561595940 ...省略其它 127.0.0.1:6379>
注意看rdb_last_save_time字段,说明save命令触发了持久化。
三、AOF介绍
为了演示AOF,我们需要手动把AOF开关打开,然后重启redis。
AOF将Redis执行的每一条写命令追加到磁盘文件(appendonly.aof)中,如果打开了AOF,redis启动时候优先选择从AOF文件恢复数据。
相关配置
除了开关,和AOF相关的配置还有以下几个:
appendfilename "appendonly.aof" #数据库文件名 # appendfsync always #每个命令都追加写入 appendfsync everysec #每秒写1次 # appendfsync no #写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到aof no-appendfsync-on-rewrite yes: #正在导出rdb快照的过程中,是否停止同步aof auto-aof-rewrite-percentage 100 #aof文件大小比起上次重写时的大小,增长率100%时,重写 auto-aof-rewrite-min-size 64mb #aof文件,至少超过64M时,才重写
重写机制
通过前面讲述的AOF的过程,聪明的你可能会想到一个问题,AOF不断的追加命令到文件,那文件岂不是越来越大,时间长了对磁盘空间也是负担啊。
你都想到了,redis的作者会想不到吗?redis引入了重写机制来解决这个问题。上面配置的最后两条其实就是重写的触发条件,说白了意思就是:
当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发
除了上面的条件触发,AOF也支持手动触发(bgrewriteaof命令)下面用这个命令演示重写
λ redis-cli.exe 127.0.0.1:6379> bgrewriteaof Background append only file rewriting started 127.0.0.1:6379>
启动日志:
[18268] 27 Jun 09:23:41.282 # Server started, Redis version 3.2.100 [18268] 27 Jun 09:23:41.282 * The server is now ready to accept connections on port 6379 [18268] 27 Jun 09:24:03.236 * Background append only file rewriting started by pid 18740 [18268] 27 Jun 09:24:03.388 * AOF rewrite child asks to stop sending diffs. [18268] 27 Jun 09:24:03.488 # fork operation complete [18268] 27 Jun 09:24:03.489 * Background AOF rewrite terminated with success [18268] 27 Jun 09:24:03.491 * Residual parent diff successfully flushed to the rewritten AOF (0.00 MB) [18268] 27 Jun 09:24:03.496 * Background AOF rewrite finished successfully
四、总结
- 如果使用持久化,建议RDB和AOF都开启,双重保障。AOF会优先执行,如果执行失败还有RDB
- RDB适合大规模数据恢复,但是完整性不如AOF,因为RDB可能在最后一次备份时宕机了
- RDB相对AOF比较占用内存
写在最后
原文链接:https://www.cnblogs.com/Java-no-1/p/11099817.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- redis缓存 2020-06-12
- Spring Boot 2.3.0 新特性Redis 拓扑动态感应 2020-06-11
- 作为一个面试官,我想问问你Redis分布式锁怎么搞? 2020-06-10
- 分布式锁没那么难,手把手教你实现 Redis 分布锁!|保姆级教 2020-06-08
- Redis企业级数据备份与恢复方案 2020-06-04
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash