第4章 数据安全与性能保障
本文最后更新于:2024年7月6日 早上
目的:理解Redis的运作原理
4.1 持久化选项
一句话概括持久化概念:将内存中的数据保存到硬盘。
Redis的持久化方式:
快照(snapshotting)
将某一时刻的所有数据保存到硬盘
只追加文件(append-only file, AOF)
在执行写命令时,将被执行的写命令复制到硬盘中。
上述两种方法可以灵活的选择、结合使用。
使用Redis数据持久化的原因:
- 重用数据
- 防止系统故障
- 针对复杂计算得出的结果,进行持久化,可以节省时间
4.1.1 快照的持久化
创建快照——获得存储在内存里面的数据在某个时间点上的副本
创建快照的方法
BGSAVE(由于需要调用unix的fork,windows没有)
SAVE
该命令完成前将不会执行其他指令
配置了SAVE选项,满足条件调用BGSAVE
收到SHUTDOWN或者TERM信号,会调用SAVE
链接另一个服务器,并执行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-percentage
与auto-aof-rewrite-min-size
选项来配置自动执行BGREWRITEAOF
随着负载的上升,可以考虑复制特性