3 Redis 持久化

1 为什么需要持久化:

  • Data persistence enables recovery in the event of memory loss or other catastrophic failure.

2 持久化的类型:

  • RDB (Redis Database):Snapshots are copies of the in-memory database,
  • AOF(Append-Only File):records write operations made to the database

3 RDB

  • 在指定的时间间隔,执行数据集的时间点快照。
  • 快照文件就称为RDB文件(dump.rdb)
  • 配置文件:
// redis.conf

# Save the DB to disk. 
# 每X秒或者Y次改写后,就自动存储RDB
# save <seconds> <changes> [<seconds> <changes> ...]
# 
# Redis will save the DB if the given number of seconds elapsed and it
# surpassed the given number of write operations against the DB.
  • 手动触发
    • save - 会阻塞主线程,不建议使用
    • bgsave - non blocking

3.1 RDB 优势

  • 适合大规模的数据恢复
  • 按照业务定时备份
  • 对数据完整性和一致性要求不高
  • RDB文件在内存中的加载速度要比AOF快很多

3.2 RDB 劣势

  • 在一定间隔时间做一次备份,所以如果redis意外down掉的话,就会丢失从当前至最近一次快照期间的数据,快照之间的数据会丢失
  • 内存数据的全量同步,如果数据量太大会导致IO严重影响服务器性能
  • RDB依赖于主进程的fork,在更大的数据集中,这可能会导致服务请求的瞬间延迟。fork的时候内存中的数据被克隆了一份,大致2倍的膨胀性,需要考虑

4 AOF

4.1如何开启

// redis.conf
appendonly yes

appendfsync everysec
appenddirname "appendonlydir"
appendfilename "appendonly.aof"

4.2 aof 同步策略

  • Client作为命令的来源,会有多个源头以及源源不断的请求命令。
  • 在这些命令到达Redis Server 以后并不是直接写入AOF文件,会将其这些命令先放入AOF缓存中进行保存。
  • 这里的AOF缓冲区实际上是内存中的一片区域,存在的目的是当这些命令达到一定量以后再写入磁盘,避免频繁的磁盘IO操作。
  • AOF缓冲会根据AOF缓冲区同步文件的三种写回策略将命令写入磁盘上的AOF文件。
  • 随着写入AOF内容的增加为避免文件膨胀,会根据规则进行命令的合并(又称AOF重写),从而起到AOF文件压缩的目的。
  • 当Redis Server服务器重启的时候会队AOF文件载入数据。

4.3 三种同步策略

  • always:同步写回,每个写命令执行完立刻同步地将日志写会磁盘
  • everysec:每秒写回,每个写命令执行完,只是先把日志写到AOF文件的内存缓冲区,每隔1秒把缓冲区中的内容写入到磁盘
  • no:操作系统控制的写回,每个写命令执行完,只是先把日志写到AOF文件的内存缓冲区,由操作系统决定何时将缓冲区内容写回磁盘

4.4 AOF 文件

  • before redis 7.0 aof文件只有一个
  • after redis 7.0 - multi part aof

MP-AOF实现 方案概述 顾名思义,MP-AOF就是将原来的单个AOF文件拆分成多个AOF文件。在MP-AOF中,我们将AOF分为三种类型, 分别为:

  • BASE: 表示基础AOF,它一般由子进程通过重写产生,该文件最多只有一个。
  • INCR:表示增量AOF,它一般会在AOFRW开始执行时被创建,该文件可能存在多个。
  • HISTORY:表示历史AOF,它由BASE和INCR AOF变化而来,每次AOFRW成功完成时,本次AOFRW之前对应的BASE和INCR AOF都将变为HISTORY,HISTORY类型的AOF会被Redis自动删除。

4.4 优缺点

优点

  • 更好的保护数据不丢失、性能高、可做紧急恢复
  • 当AOF 变得太大时,Redis 能够在后台自动重写AOF
    缺点
  • 相同数据集的数据而言AOF文件要远大于RDB文件
  • AOF运行效率要慢于RDB,每秒同步策略效率较好,不同步效率和RDB相同

5 RDB 和 AOF 混合持久化

  • 开启aof
 aof-use-rdb-preamble yes
  • RDB镜像做全量持久化,AOF做增量持久化 先使用RDB进行快照存储,然后使用AOF持久化记录所有的写操作,当重写策略满足或手动触发重写的时候,将最新的数据存储为新的RDB记录
  • 重启服务的时候会从RDB和AOF两部分恢复数据,既保证了数据完整性,又提高了恢复数据的性能
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.持久化概念: redis支持 将内存中的数据持久化到磁盘中,在下次启动redis时可以将磁盘中的数据加载到内存...
    3517a85fd522阅读 7,755评论 0 1
  • 一、RDB持久化 1、有两个Redis命令可以用于生成RDB文件,一个是SAVE,另一个是BGSAVE (1) S...
    yannhuang阅读 2,481评论 0 0
  • Redis 中数据的持久化 前言 我们知道 Redis 是内存数据库,所有操作都在内存上完成。内存的话,服务器断电...
    Java架构师阅读 3,352评论 0 0
  • redis是一个内存数据库,一旦服务器宕机,内存中的数据将全部丢失。所以,对 Redis 来说,实现数据的持久化,...
    码农Kkio阅读 2,682评论 0 1
  • 我们通常将 Redis 作为缓存使用,提高读取响应性能,一旦 Redis 宕机,内存中的数据全部丢失,假如现在直接...
    匠丶阅读 3,229评论 0 0