Redis的持久化

概述

Redis的高性能是由于其将所有数据都存储在了内存中
为了使Redis在重启之后仍能保证数据不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化
Redis支持两种方式的持久化,可以单独使用其中一种或将二者结合使用。

  • 一种是RDB方式,一种是AOF方式。

    • RDB持久化(默认支持,无需配置) 该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘。
    • AOF持久化 该机制将以日志的形式记录服务器所处理的每一个写操作 在Redis服务器启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的。
    • 无持久化 我们可以通过配置的方式禁用Redis服务器的持久化功能 这样我们就可以将Redis视为一个功能加强版的memcached了

redis可以同时使用RDB和AOF

RDB持久化机制

RDB持久化机制优点

一旦采用该方式,那么你的整个Redis数据库将只包含一个文件
这对于文件备份而言是非常完美的

RDB持久化机制缺点

如果你想保证数据的高可用性,即最大限度的避免数据丢失,那么RDB将不是一个很好的选择。因为系统一旦在定时持久化之前出现宕机现象,此前没有来得及写入磁盘的数据都将丢失。
由于RDB是通过fork子进程来协助完成数据持久化工作的,因此,如果当数据集较大时,可能会导致整个服务器停止服务几百毫秒,甚至是1秒钟

快照触发条件

  1. 客户端执行命令save和bgsave会生成快照;
  2. 客户端执行命令save和bgsave会生成快照;
  3. 根据配置文件save m n规则进行自动快照;
  4. 主从复制时,从库全量复制同步主库数据,此时主库会执行bgsave命令进行快照;
  5. 客户端执行数据库清空命令FLUSHALL时候,触发快照;
  6. 客户端执行shutdown关闭redis时,触发快照;

RDB持久化机制的配置

save m n

配置快照(rdb)促发规则,格式:save <seconds> <changes>
save 900 1 900秒内至少有1个key被改变则做一次快照
save 300 10 300秒内至少有10个key被改变则做一次快照
save 60 10000 60秒内至少有10000个key被改变则做一次快照

关闭该规则使用save “ ”

dbfilename dump.rdb

rdb持久化存储数据库文件名,默认为dump.rdb

stop-write-on-bgsave-error yes

yes代表当使用bgsave命令持久化出错时候停止写RDB快照文件,no表明忽略错误继续写文件。

rdbchecksum yes

在写入文件和读取文件时是否开启rdb文件检查,检查是否有无损坏,如果在启动是检查发现损坏,则停止启动。

dir "./"

数据文件存放目录,rdb快照文件和aof文件都会存放至该目录,请确保有写权限

rdbcompression yes

是否开启RDB文件压缩,该功能可以节约磁盘空间

AOF持久化机制

AOF概述

当redis存储非临时数据时,为了降低redis故障而引起的数据丢失,redis提供了AOF(Append Only File)持久化,
从单词意思讲,将命令追加到文件。AOF可以将Redis执行的每一条写命令追加到磁盘文件(appendonly.aof)中
在redis启动时候优先选择从AOF文件恢复数据。由于每一次的写操作,redis都会记录到文件中,所以开启AOF持久化会对性能有一定的影响
AOF持久化数据丢失更少,其消耗内存更少(RDB方式执行bgsve会有内存拷贝)

开启AOF持久化

默认情况下,redis是关闭了AOF持久化,开启AOF通过配置appendonly为yes开启
将appendonly修改为yes,开启aof持久化机制,默认会在目录下产生一个appendonly.aof文件
我们修改配置文件或者在命令行直接使用config set修改,在用config rewrite同步到配置文件。通过客户端修改好处是不用重启redis,AOF持久化直接生效
config get appendonly 查询配置状态
config set appendonly yes 修改配置
config rewrite 写入到redis.conf中

配置

appendfsync always 每执行一次更新命令,持久化一次
appendfsync everysec 每秒钟持久化一次
appendfsync no 不持久化

RDB-AOF混合持久化

通过aof-use-rdb-preamble配置参数控制,yes则表示开启,no表示禁用,默认是禁用的,可通过config set修改。

Last modification:January 30th, 2020 at 03:17 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment