第4章 数据安全与性能保障

本文最后更新于:2022年8月1日 凌晨

目的:理解Redis的运作原理

4.1 持久化选项

一句话概括持久化概念:将内存中的数据保存到硬盘。

Redis的持久化方式

  1. 快照(snapshotting)

    将某一时刻的所有数据保存到硬盘

  2. 只追加文件(append-only file, AOF)

    在执行写命令时,将被执行的写命令复制到硬盘中。

上述两种方法可以灵活的选择、结合使用。

使用Redis数据持久化的原因

  1. 重用数据
  2. 防止系统故障
  3. 针对复杂计算得出的结果,进行持久化,可以节省时间

4.1.1 快照的持久化

创建快照——获得存储在内存里面的数据在某个时间点上的副本

创建快照的方法

  1. BGSAVE(由于需要调用unix的fork,windows没有)

  2. SAVE

    该命令完成前将不会执行其他指令

  3. 配置了SAVE选项,满足条件调用BGSAVE

  4. 收到SHUTDOWN或者TERM信号,会调用SAVE

  5. 链接另一个服务器,并执行SYNC命令

要点:

如果系统发生崩溃,用户将丢失最近一次生成快照之后更改的数据

使用场景:

  • 个人开发

  • 对日志进行聚合计算

  • 大数据

    创建子进程将会消耗大量的时间

如果能接受并处理好数据丢失的情况,快照是一个不错的持久化方案,否则应该考虑AOF

4.1.2 AOF持久化

AOF持久化会将被执行的命令写到AOF文件的末尾,以此来记录数据发生的改变。

只需要从头到尾执行AOF文件所包含的命令,就可以恢复数据集。

启用:

appendonly yes

appendfsync everysec 可以兼顾数据安全与写入性能

缺陷:

​ AOF文件的大小

4.1.3 重写/压缩AOF文件

问题:

​ Redis会不断将命令写入AOF文件,随着运行时间的增长,AOF文件的体积会不断变大,如果不做处理,将会占用大量的硬盘资源。

解决方案:

BGREWRITEAOF命令——通过此命令可以移除AOF中冗余的命令记录,从而达到重写AOF来减小体积。

auto-aof-rewrite-percentageauto-aof-rewrite-min-size选项来配置自动执行BGREWRITEAOF

随着负载的上升,可以考虑复制特性

4.2 复制


第4章 数据安全与性能保障
https://yance.wiki/note1/
作者
Yance Huang
发布于
2019年5月5日
许可协议