redis持久化

来源:互联网 发布:js table 导出excel 编辑:程序博客网 时间:2024/06/05 17:01

redis持久化:

1.持久化之RDB(RedisDataBase):

在指定时间间隔内将内存中的数据集快照写入磁盘,恢复时是将快照文件直接读到内存;

Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能。

如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加高效。RDB的缺点是最后一次持久化后的数据可能丢失。

Fork的作用是复制一个与当前进程一样的进程。新进程的所有数据都和原进程一致,但是是一个全新的进程,并作为原进程的子进程。

RDB保存的是dump.rdb文件。重启后会将dump.rdb文件重新读回内存。dump.rdb文件名可以在redis.conf文件里修改。

指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合

    save <seconds><changes>

   Redis默认配置文件中提供了三个条件:

    save 900 1

    save 300 10

    save 60 10000

分别表示900秒(15分钟)内有1个更改,

300秒(5分钟)内有10个更改,

60秒内有10000个更改,可以自己控制时间,截图:

也可以用save命令手动保存,即如果5分钟改动小于10次,但想立刻保存,可以敲save,例如:5分钟内只修改了k12的值,但修改完了想立刻保存到dump.rdb文件中,用save,截图:

如果想禁用RDB持久化的策略,只要不设置任何save指令,或者给save传入一个空字符串也可以,截图:

执行flushall命令也会产生dump.rdb文件,但是由于flushall命令把数据库清空了,所以dump.rdb文件里面是空的。

config get dir:查看dump.rdb文件的存放目录,截图:

优势:适合大规模的数据恢复;对数据完整性和一致性要求不高。

劣势:由于是在一定时间间隔做一次备份,所以如果redis以外down掉的话,将会丢失最后一次快照后的所有修改;fork的时候,内存中的数据被克隆了一份,大致2倍的膨胀性需要考虑。

 

2.持久化之AOF(AppendOnly File):

以日志的形式来记录每个写操作,将redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。

AOF持久化默认没有开启,截图:

AOF持久化数据默认保存在appendonly.aof文件中,可以修改文件名但不建议修改,截图:

AOF备份的频率(策略):

appendfsync always   每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用;

appendfsync everysec   每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐;

appendfsync no   完全依赖 os,性能最好,持久化没保证。

AOFRDB可以共存,两个都存在的时候先加载AOF

appendonly.aof文件出了问题之后用redis-check-aof  –-fix appendonly.aof命令修复;dump.rdb文件出了问题之后用redis-check-dump –-fix dump.rdb命令修复。

Rewrite:AOF采用文件追加方式,文件会越来越大,为避免出现此种情况,新增了重写机制,当AOF文件的大小超过所设定的阈值时,redis就会启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集,可以使用命令bgrewriteaof;

重写原理:AOF文件持续增长而过大时,会fork出一条新进程来将文件重写(也是先写临时文件最后再rename),遍历新进程的内存中数据,每条记录有一条set语句。重写AOF文件的操作,并没有读取旧的AOF文件,而是将整个内存中的数据库内容用命令的方式重写了一个新的AOF文件,这点和快照有点类似。

触发机制:redis会记录上次重写时的AOF大小,默认配置是当AOF文件大小是上次rewrite后大小的一倍(下图中的100%)且文件大于64M时触发(实际开发中远远大于64M,可以设到5G以上),截图:

no-appendfsync-on-rewrite:重写时是否可以运用appendfsync,用默认no即可,保证数据安全性,截图:

优势:可灵活配置为:每秒同步:appendfsync always;每修改同步:appendfsync everysec;不同步:appendfsync no;

劣势:对相同数据集的数据而言AOF文件远大于RDB,恢复速度慢于RDB;AOF运行效率慢于RDB,每秒同步策略效率较好,不同步效率和RDB相同。

建议AOF和RDB同时使用保证数据完整性。

1 0
原创粉丝点击