内容简介:本次演示使用的redis版本是3.2.100,操作系统是win10。redis支持两种持久化方案,RDB和AOF,前者是默认打开的,后者需要手动开启。我们通过配置文件可以验证这一点,
一、基本介绍
本次演示使用的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比较占用内存
写在最后
- 第一:看完点赞,感谢您对作者的认可;
- ...
- 第二:随手转发,分享知识,让更多人学习到;
- ...
- 第三:记得点关注,每天更新的!!!
- ...
最后,欢迎做 Java 的工程师朋友们加入Java高级架构进阶Qqun:963944895
群内有技术大咖指点难题,还提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)
比你优秀的对手在学习,你的仇人在磨刀,你的闺蜜在减肥,隔壁老王在练腰, 我们必须不断学习,否则我们将被学习者超越!
趁年轻,使劲拼,给未来的自己一个交代!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Persuasive Technology
B.J. Fogg / Morgan Kaufmann / 2002-12 / USD 39.95
Can computers change what you think and do? Can they motivate you to stop smoking, persuade you to buy insurance, or convince you to join the Army? "Yes, they can," says Dr. B.J. Fogg, directo......一起来看看 《Persuasive Technology》 这本书的介绍吧!