聚看点官网导读:一篇文章彻底明白Redis持久化:RDB和AOF

admin 4个月前 (05-11) 科技 42 0

为什么需要持久化?

Redis对数据的操作都是基于内存的,当遇到了历程退出、服务器宕机等意外情形,若是没有持久化机制,那么Redis中的数据将会丢失无法恢复。有了持久化机制,Redis在下次重启时可以行使之前持久化的文件举行数据恢复。明白和掌握Redis的持久机制,对于Redis的一样平常开发和运维都有很大辅助,也是在大厂面试经常被问到的知识点。Redis支持的两种持久化机制:

  1. RDB:把当前数据天生快照保存在硬盘上。
  2. AOF:纪录每次对数据的操作到硬盘上。

接下来,我们详细领会一下这两种持久化机制。

迎接关注微信民众号:万猫学社,每周一分享JAVa手艺干货。

RDB持久化

RDB(Redis DataBase)持久化是把当前Redis中所有数据天生快照保存在硬盘上。RDB持久化可以手动触发,也可以自动触发。

手动触发

savebgsave下令都可以手动触发RDB持久化。

save下令

执行save下令会手动触发RDB持久化,然则save下令会壅闭Redis服务,直到RDB持久化完成。当Redis服务储存大量数据时,会造成较长时间的壅闭,不建议使用。

> save
OK

执行后,Redis的日志中纪录:

 * DB saved on disk
bgsave下令

执行bgsave下令也会手动触发RDB持久化,和save下令差别是:Redis服务一样平常不会壅闭。Redis历程会执行fork操作建立子历程,RDB持久化由子历程卖力,不会壅闭Redis服务历程。Redis服务的壅闭只发生在fork阶段,一样平常情形时间很短。

> bgsave
Background saving started

执行后,Redis的日志中纪录:

 * Background saving started by pid 2645
 * DB saved on disk
 * RDB: 0 MB of memory used by copy-on-write
 * Background saving terMinated with success

bgsave下令的详细流程如下图:

  1. 执行bgsave下令,Redis历程先判断当前是否存在正在执行的RDB或AOF子线程,若是存在就是直接竣事。
  2. Redis历程执行fork操作建立子线程,在fork操作的过程中Redis历程会被壅闭。
  3. Redis历程fork完成后,bgsave下令就竣事了,自此Redis历程不会被壅闭,可以响应其他下令。
  4. 子历程凭据Redis历程的内存天生快照文件,并替换原有的RDB文件。
  5. 子历程通过信号量通知Redis历程已完成。

迎接关注微信民众号:万猫学社,每周一分享Java手艺干货。

自动触发

除了执行以上下令手动触发以外,Redis内部可以自动触发RDB持久化。自动触发的RDB持久化都是接纳bgsave的方式,削减Redis历程的壅闭。那么,在什么场景下会自动触发呢?

  1. 在设置文件中设置了save的相关设置,如sava m n,它示意在m秒内数据被修悔改n次时,自动触发bgsave操作。
  2. 当从节点做全量复制时,主节点会自动执行bgsave操作,而且把天生的RDB文件发送给从节点。
  3. 执行debug reload下令时,也会自动触发bgsave操作。
  4. 执行shutdown下令时,若是没有开启AOF持久化也会自动触发bgsave操作。

RDB优点

RDB文件是一个紧凑的二进制压缩文件,是Redis在某个时间点的所有数据快照。以是使用RDB恢复数据的速率远远比AOF的快,异常适合备份、全量复制、灾难恢复等场景。

RDB瑕玷

每次举行bgsave操作都要执行fork操作建立子经常,属于重量级操作,频仍执行成本过高,以是无法做到实时持久化,或者秒级持久化。

另外,由于Redis版本的不停迭代,存在差别花样的RDB版本,有可能泛起低版本的RDB花样无法兼容高版本RDB文件的问题

迎接关注微信民众号:万猫学社,每周一分享Java手艺干货。

AOF持久化

AOF(APPend Only File)持久化是把每次写下令追加写入日志中,当需要恢复数据时重新执行AOF文件中的下令就可以了。AOF解决了数据持久化的实时性,也是现在主流的Redis持久化方式。

AOF持久化流程

AOF流程如下图:

  1. 下令追加(append):所有写下令都会被追加到AOF缓存区(aof_buf)中。
  2. 文件同步(sync):凭据差别计谋将AOF缓存区同步到AOF文件中。
  3. 文件重写(rewrite):定期对AOF文件举行重写,以到达压缩的目的。
  4. 数据加载(load):当需要恢复数据时,重新执行AOF文件中的下令。

文件同步计谋

AOF持久化流程中的文件同步有以下几个计谋:

  1. always:每次写入缓存区都要同步到AOF文件中,硬盘的操作比较慢,限制了Redis高并发,不建议设置。
  2. no:每次写入缓存区后不举行同步,同步到AOF文件的操作由操作系统卖力,每次同步AOF文件的周期不可控,而且增大了每次同步的硬盘的数据量。
  3. eversec:每次写入缓存区后,由专门的线程每秒钟同步一次,做到了兼顾性能和数据平安。是建议的同步计谋,也是默认的计谋。

发文件重写

AOF持久化流程中的文件重写可以手动触发,也可以自动触发。

  1. 手动触发:使用bgrewriteaof下令。
  2. 自动触发:凭据auto-aof-rewrite-min-size和auto-aof-rewrite-percentage设置确定自动触发的时机。auto-aof-rewrite-min-size示意运行AOF重写时文件巨细的最小值,默以为64MB;auto-aof-rewrite-percentage示意当前AOF文件巨细和上一次重写后AOF文件巨细的比值的最小值,默以为100。只用前两者同时超过时才会自动触发文件重写。

迎接关注微信民众号:万猫学社,每周一分享Java手艺干货。

AOF持久化设置

对AOF持久化的详细流程有了领会后,我们来看一下若何设置AOF。AOF持久化默认是不开启的,需要修改设置文件,如:

# appendonly改为yes,开启AOF
appendonly yes
# AOF文件的名字
appendfilename "appendonly.aof"
# AOF文件的写入方式
# everysec 每个一秒将缓存区内容写入文件 默认开启的写入方式
appendfsync everysec
# 运行AOF重写时AOF文件巨细的增长率的最小值
auto-aof-rewrite-percentage 100
# 运行AOF重写时文件巨细的最小值
auto-aof-rewrite-min-size 64mb

微信民众号:万猫学社

微信扫描二维码

获得更多Java手艺干货

聚看点官网导读:一篇文章彻底明白Redis持久化:RDB和AOF 第1张,

SuNBet

Sunbet 和 www.eyaeya.com强强联合,打造一站式全民直营平台,用资本、技术、服务在同行中获胜。Sunbet和EYAEYA网提供数十种线上纸牌、zhenren、电子游戏,致力打造公平公开公正的信誉平台。

皇冠APP声明:该文看法仅代表作者自己,与本平台无关。转载请注明:聚看点官网导读:一篇文章彻底明白Redis持久化:RDB和AOF

网友评论

  • (*)

最新评论

文章归档

站点信息

  • 文章总数:734
  • 页面总数:0
  • 分类总数:8
  • 标签总数:1068
  • 评论总数:403
  • 浏览总数:23259