RDB持久化和AOF持久化
redis有2种持久化方式,rdb持久化和aof持久化
RDB做基线全量持久化,全量持久化保留基线数据,rdb文件存储key键值,特定时间点触发,save/bgsave手动触发rdb持久化
AOF做命令持久化,增量持久化保留变更命令,类似binlog。appendfsync打开时才启用aof持久化,默认是关闭的。
appendfsync有3种情况,always,everysec,no。
redis6支持RDB和AOF混合持久化
REDIS的ACID特性
redis具有原子性,一致性,隔离性。耐久性看情况
1.当服务器在RDB持久化模式下,服务器只在特定条件下才执行BGSAVE,对数据库进行保存,RDB模式下不具备耐久性
2.当redis在AOF持久化模式下,appendfsync为always时,每个事物后都会sync,讲变更数据保存在磁盘中,这种配置下的事务具备持久性(no-appendfsync-on-rewrite打开,也不具备耐久性)
3.当redis在AOF持久化模式下,appendfsync为everysec时,每秒sync一次数据到磁盘中,宕机可能会丢失1s内的数据,这种配置下的不具备持久性
4.当redis在AOF持久化模式下,appendfsync为no时,redis会交由操作系统来决定什么时候同步数据到硬盘,宕机可能会丢失数据,这种配置下的不具备持久性
如果掉电,丢失的数据取决于持久化的策略。
如果是RDB持久化,那么一般来说肯定会有数据丢失(除非每个事物后都跟上SAVE或BGSAVE,这基本上不可能的)
如果是AOF持久化,appendfsync不为always,肯定会有数据丢失。但是如果是always,会丢失一定的性能。