redis持久化

2018-06-16  本文已影响80人  起个名忒难
为什么需要持久化

Redis为内存数据库, 所有的数据都保存在内存中,为了避免意外或者机器发生故障的情况,造成数据的丢失,所以要做持久化操作。持久化的意义,主要是为了数据重用。当redis重启或者机器重启时,将原先存在的数据在恢复到redis中,来提供数据服务。

redis持久化机制

Redis提供了两种持久化方案,分别为:

RDB持久化

RDB持久化是将redis中某个时间点上存储数据的全部拷贝,形成一个数据的副本,保存的文件后缀为rdb。 此文件 dump.rdb(默认文件名) 保存了当前redis中的全部数据, 可以对此文件进行备份操作,如:复制到另外的主机,或者云主机等。生成快照文件后,redis在重新启动时,会自动的加载快照中的数据。

触发条件

RDB持久化的触发分为下面几种:

RDB执行流程

RDB持久化机制的工作流程:

RDB优缺点

优点:

缺点:

常用配置

下面是RDB常用的配置项,以及默认值:

AOF持久化

AOF持久化将会被执行的命令写到AOF文件的末尾,依次来记录数据发生的变化。因为在进行数据恢复的时候,只要把AOF文件从头到尾再执行一遍就可以恢复了。aof持久化默认是关闭的,需要将 appendonly no 选项改成 appendonly yes 来开启。AOF记录的是写入的命令,无须显示触发。

AOF工作流程

AOF的工作流程: 打开AOF持久化的配置选项后,redis每次接收一条写命令,都会写入日志文件中,具体的步骤是,先如写入系统的os cache 中,然后每隔一定的时间执行fsync操作,在保存到文件中。

关于fsync操作,redis的配置文件中提供了 appendfsync选项来支持不同的选择策略,可配置策略如下:

重写和压缩AOF文件

如果开启了AOF选项,那么最低会丢失一秒的数据,而且也可以在极短的时间内完成定期的持久化操作,那么我们为什么不使用 AOF持久化呢? 这个问题没有那么简单,如果我们不停的往aof文件写入命令,那么会造成aof的文件很大,比较恐怖的情况就是,aof文件用完了所有的硬盘空间。为了解决AOF文件不断增大的问题,所以redis引入了重写(rewrite)来解决,需要特别说明的是重写是对redis中的数据转化为写命令,不会对旧的AOF文件进行任何的读取和写入操作。

文件重写的触发

手动触发:发送 bgrewriteof命令
自动触发:配置 auto-aof-rewrite-min-size和auto-aof-rewrite-percentage选项。 假设用户对redis设置了auto-aof-rewrire-min-size 64M 和 auto-aof-rewrite-percentage 100 ,而且启用了aof , 那么当aof文件的体积大于64M,而且比上次重写之后的体积大了一倍的时候,redis就会触发bgrewriteaof操作。

AOF优缺点

优点:

缺点:

AOF常用配置

下面是AOF常用的配置项,以及默认值:

上一篇 下一篇

猜你喜欢

热点阅读