Redis 学习笔记 #Redis持久化

RDB持久化

Redis Database Backup File(Redis数据备份文件)简称 Redis 数据快照

Redis 将内存中数据记录到磁盘

Redis 故障重启后从磁盘读取 RDB file 恢复数据

save #主进程执行 RDB 阻塞所有命令

bgsave #子进程执行 RDB

注:关于bgsave 开始时将主进程中页表 fork(拷贝) 到子进程 实现子进程共享主进程的内存数据(页表存放虚拟内存与物理内存映射关系 主进程只能操作虚拟内存)

fork 基于 copy-on-write 技术

  • 主进程进行读操作,访问共享内存(例如:数据A)
  • 主进程进行写操作(例如 数据B),拷贝一份数据(数据B'),进行写操作,相应的对于数据B的读也指向了(数据B')

Redis 默认服务停止前将执行一次 RDB

RDB 的缺点

  • 间隔时间长,两次 RDB 之间写入数据有丢失的风险
  • fork 子进程、压缩、写出 RDB 文件都比较耗时间

AOF持久化

Append Only File(追加文件)

Redis 处理的命令均记录在 AOF文件(等同于命令日志文件)

Redis 中 AOF 默认关闭

AOF 命令记录默认频率 appendfsync everysec

注:其中 always 可靠性高但性能过差, no 性能最高但可靠性较差, everysec为折中选择

AOF文件相较于 RDB文件更大

通过 bgrewriteaof 命令让 AOF文件执行重写功能 以简化同一key多次写操作

Redis 在 AOF文件超过阈值时会自动去重写 AOF文件

  • auto-aof-rewrite-percentage 100 (相比上次文件增长超过多少百分比触发)
  • auto-aof-rewrite-min-size 64mb (文件体积大于阈值触发)

AOF 与 RDB 对比

RDB

AOF

持久化方式

定时对整个内存进行快照

记录执行的命令

数据完整性

不完整(两次备份间数据丢失)

相对完整(取决于appendfsync)

文件大小

文件体积小(可压缩)

文件体积大

宕机恢复速度

数据恢复优先级

低(数据完整性弱于AOF)

高(数据完整性高)

系统资源占用

高(CPU与内存大量占用)

低(主要是磁盘IO资源)

注:AOF重写时也将占用大量CPU与内存资源

你可能感兴趣的:(Redis学习笔记,redis,数据库,缓存,学习)