概述
大家都知道,Redis是内存数据库,它会把数据都储存在内存当中,可以大幅提高读取速度,但这也出现一个问题,数据易丢失。所以,将内存中的数据持久化处理是很有必要的。Redis共提供了两种持久化的方式,RDB全量写入方式和AOF增量写入方式。
RDB全量写入方式
RDB就是将整个redis中的内容dump下来,做一个快照。RDB是redis默认的持久化方式。
相关配置
|
|
前三行是触发RDB的条件,意思是当900秒中redis有一条数据写入就会进行RDB操作,二三行同上。
相关命令
save
save是以阻塞的方式将redis的数据写入rdb文件,是redis主进程进行此项操作,直到该文件创建完毕的这段时间内redis将不能处理任何命令请求。
bgsave
执行bgsave操作时,redis主进程会先fork一个子进程,由子进程将数据写入rdb文件。这种方式耗费的资源比save要多。
AOF增量写入方式
AOF类似于日志,会将对redis的所有操作写入aof文件中,方便数据的恢复。
相关配置
|
|
三种触发持久化的策略
第四行是AOF持久化的策略,AOF共有三种持久化策略,分别为always、everysec 、no。
- always策略是每提交一个修改命令都调用fsync刷新到AOF文件
- everysec策略是每秒钟都调用fsync将一秒内的修改刷新至AOF文件,但可能会丢失一秒以内的数据
- noc策略是依靠OS进行刷新,redis不主动刷新AOF
AOF文件重写
我们知道,AOF持久化会记录redis的每一条修改指令,所以AOF文件会变得非常非常的大。因此redis实现了AOF文件重写的方法,就是会合并对相同key的操作。例如:key的值为1, INCR key操作进行了5次,AOF重写后变为SET key 6。查了相关的资料,发现这个“重写”的说法是有歧义的。AOF重写并不是对原有AOF文件进行任何写入和读取,而是根据目前的结果来用相应的语句实现。讲了这么多,redis配置文件中有关重写的配置有auto-aof-rewrite-percentage和auto-aof-rewrite-min-size。第一个的意思是达到文件增量的百分比时触发重写,默认为100%;第二个是文件大小达到指定大小触发重写,默认为64mb。
两种持久化方式的比较
RDB | AOF | |
---|---|---|
恢复优先级 | 低 | 高 |
文件体积 | 小 | 大 |
恢复速度 | 快 | 慢 |
数据安全性 | 易丢数据 | 根据策略决定 |
轻重 | 重 | 轻 |