redis持久化与ACID特性

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,会丢失一定的性能。

猜你喜欢

转载自blog.csdn.net/qq_40687433/article/details/109388112