redis的操作都是在内存中操作的,所以很快,但是如果只存在于内存中,一旦机器宕了,岂不是所有数据都没了,所以要持久化到磁盘,持久化的方式有RDB、AOF、及混合模式
一、RDB
RDB是一个非常紧凑的文件,它在保存RDB文件时父进程唯一要做的就是fork出一个子进程,接下来的工作全部由子进程来做,父进程不需要再做其他IO操作,所以RDB持久化方式可以最大化redis的性能。
与AOF相比,在恢复大的数据集的时候,RDB方式会更快一些,但是他数据丢失风险大,最后一次持久化的数据可能丢失
配置的方式
appendonly no
dbfilename dump.rdb
dir /home/redis/data/
二、AOF
以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),
只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作,所以用AOF的方式回复数据会很慢,但他恢复的数据全
配置的方式
appendonly yes
appendfilename appendonly.aof
dir /home/redis/data/
logfile /home/leyou/redis/data/redis.log
appendfsync everysec
属性配置 | 含义 |
---|---|
appendfsync always | 同步持久化, 每次发生数据变更会被立即记录到磁盘 性能较差但数据完整 |
appendfsync everysec | 异步操作,每秒记录 如果一秒内宕机,有数据丢失 |
appendfsync no | 从不同步 |
——
三、混合
采用RDB和AOF混合的方式,这种方式是先根据RDB方式恢复,再根据AOF恢复,这样就又可以恢复的快,还不会缺少数据了
配置的方式修改配置文件中的aof-use-rdb-preamble
aof-use-rdb-preamble yes