Redis是基于内存操作,但作为⼀个数据库也具备数据的持久化能⼒;但是为了实现⾼效的读写操作,并不会
即时进⾏数据的持久化,⽽是按照⼀定的规则进⾏持久化操作的——持久化策略
Redis提供了2中持久化策略:
RDB (Redis DataBase)
AOF(Append Only File)
在满⾜特定的redis操作条件时,将内存中的数据以数据快照的形式存储到rdb⽂件中
原理:
RDB是redis默认的持久化策略,当redis中的写操作达到指定的次数、同时距离上⼀次持久化达到指定的时间
就会将redis内存中的数据⽣成数据快照,保存在指定的rdb⽂件中。
默认触发持久化条件:
900s 1次:当操作次数达到1次,900s就会进⾏持久化
300s 10次:当操作次数达到10次,300s就会进⾏持久化
60s 10000次:当操作次数达到10000次,60s就会就⾏持久化
我们可以通过修改redis.conf⽂件,来设置RDB策略的触发条件:
## rdb持久化开关
rdbcompression yes
## 配置redis的持久化策略
save 900 1
save 300 10
save 60 10000
## 指定rdb数据存储的⽂件
dbfilename dump.rdb
RED持久化细节分析:
缺点
如果redis出现故障,存在数据丢失的⻛险,丢失上⼀次持久化之后的操作数据;
RDB采⽤的是数据快照形式进⾏持久化,不适合实时性持久化;
如果数据量巨⼤,在RDB持久化过程中⽣成数据快照的⼦进程执⾏时间过⻓,会导致redis卡顿,因此
save时间周期设置不宜过短;
优点
但是在数据量较⼩的情况下,执⾏速度⽐较快;
由于RDB是以数据快照的形式进⾏保存的,我们可以通过拷⻉rdb⽂件轻松实现redis数据移植
Apeend Only File,当达到设定触发条件时,将redis执⾏的写操作指令存储在aof⽂件中,Redis默认未开启aof
持久化
原理:
Redis将每⼀个成功的写操作写⼊到aof⽂件中,当redis重启的时候就执⾏aof⽂件中的指令以恢复数据
配置:
## 开启AOF
appendonly yes
## 设置触发条件(三选⼀)
appendfsync always ## 只要进⾏成功的写操作,就执⾏aof
appendfsync everysec ## 每秒进⾏⼀次aof
appendfsync no ## 让redis执⾏决定aof
## 设置aof⽂件路径
appendfilename "appendonly.aof"
AOF细节分析:
也可以通过拷⻉aof⽂件进⾏redis数据移植
aof存储的指令,⽽且会对指令进⾏整理;⽽RDB直接⽣成数据快照,在数据量不⼤时RDB⽐较快
aof是对指令⽂件进⾏增量更新,更适合实时性持久化
redis官⽅建议同时开启2中持久化策略,如果同时存在aof⽂件和rdb⽂件的情况下aof优先