持久化机制
client redis【内存】---》内存数据--数据持久化-----》磁盘
提供了2中持久化的方式来将数据存储到硬盘里面分别是:
a:快照(Snapshot)
b:AOF(Append Only File) 只追加日志文件
A:快照
1:特点
这种方式可以将某一时刻的所有数据都写入硬盘中,当然这也是redis的默认开启持久化方式,保存的文件是以.rdb形式结尾的文件因此这种方式也称之为RDB方式。
2:快照的2种方式
1):客户端方式:BGSAVE和SAVE指令
a: BGSAVE:客户端可以使用BGSAVE命令来创建一个快照,当接收到客户端的BGSAVE命令时, redis会调用fork '来创建一个子进程,然后子进程负责将快照写入磁盘中, 而父进程则继续处理命令请求。
名词解释: fork当一个进程创建子进程的时候,底层的操作系统会创建该进程的一个副本,在 类unix系统中创建子进程的操作会进行优化:在刚开始的时候,父子进程共享相同内存,直到父进程或子进程对内存进行了写之后,对被写入的内存的共享才会结束服务`
b: SAVE:客户端还可以使用SAVE命令来创建一个快照,接收到SAVE命令的redis服务器在快照创建完毕之前将不再响应任何其他的命令
2):服务器配置自动触发
a):如果用户在redis.conf中设置了save配置选项, redis会在save选项条件满足之后自动触发一次BGSAVE命令,如果设置多个save配置选项,当任意一个save配置选项条件满足.redis也会触发一次BGSAVE命令
在配置文件的redis.conf文件中满足一下条件,
b):服务器接收客户端shutdown指令:
当redis通过shutdown指令接收到关闭服务器的请求时,会执行一个save命令,阻塞所有的客户端,不再执行客户端执行发送的任何命令,并且在save命令执行完毕之后关闭服务器
3:配置快照生成的名称和位置
可以在redis-conf文件中修改默认配置
B:AOF只追加日志文件
1:特点
这种方式可以将所有客户端执行的写命令记录到日志文件中AOF持久化会将被执行的写命令写到AOF的文件末尾,以此来记录数据发生的变化,因此只要redis从头到尾执行一次AOF文件所包含的所有写命令,就可以恢复AOF文件的记录的数据集.
2:开启AOF持久化:在redis的默认配置中AOF持久化机制是没有开启的,雪要在配置中开启。
#开启AOF持久化
a:修改 appendonly yes 开其持久化
b:修改 appendfilename "appendonly.aof" 指定生成文件名称
3:日志追加频率:
4:修改同步频率问题:
5:AOF带来的问题:
AOF的方式也同时带来了另一个问题。持久化文件会变的越来越大。例如我们调用incr test命令100次,文件中必须保存全部的100条命令,其实有99条都是多余的。因为要恢复数据库的状态其实文件中保存一条set test 100就够了。为了压缩aof的持久化文件Redis提供了AOF重写机制。
解决方法:AOF重写,用来一定程度上减少AOF的体积。