关于java:Redis6x学习笔记二持久化之RDB

79次阅读

共计 1987 个字符,预计需要花费 5 分钟才能阅读完成。

前言

最近学习 Redis6.x,特做笔记以备忘,与大家共学。课程是从私塾在线下载的,他们把架构师课程都放进去了,大家能够去下载学习,不要钱的,地址是 http://t.hk.uy/eK7, 课程很不错,值得学习!要害是不要钱,嘻嘻!

Redis 长久化概述

Redis 长久化分成三种形式:RDB(Redis DataBase)、AOF(Append Only File)和 AOF+RDB 混合长久化

对于 Redis 长久化,有这么一些说法:

1:RDB 是在不同的工夫点,将 Redis 某一时刻的数据生成快照并存储到磁盘上

2:AOF 是只容许追加不容许改写的文件,是将 Redis 执行过的所有写指令记录下来,在下次 Redis 重新启动时,只有把这些写指令从前到后再反复执行一遍,就能够实现数据恢复了

3:混合形式是先应用 RDB 进行快照存储,而后应用 AOF 长久化记录所有的写操作

4:RDB 和 AOF 两种形式能够同时应用,在这种状况下,如果 Redis 重启的话,则会优先采纳 AOF 形式来进行数据恢复,这是因为 AOF 形式的数据恢复残缺度更高

5:能够敞开 RDB 和 AOF,这样的话,Redis 将变成一个纯内存数据库,就像 Memcache 一样

6:通过配置 redis.conf 中的 appendonly 为 yes 就能够关上 AOF 性能

7:通过 aof-use-rdb-preamble 配置项能够关上混合形式

RDB 形式概述

RDB 形式,Redis 会独自创立(fork)一个子过程来进行长久化,会先将数据写入到一个临时文件中,待长久化过程都完结了,再用这个临时文件替换上次长久化好的文件。整个过程中,主过程是不进行任何 IO 操作的,这就确保了极高的性能

如果须要进行大规模数据的复原,且对于数据恢复的完整性不是十分敏感,那 RDB 形式要比 AOF 形式更加的高效。RDB 的毛病是最初一次长久化后的数据可能失落。

RDB 的配置

1:save :保留快照的频率,第一个 示意多长时间,单位是秒,第二个 示意至多执行写操作的次数;在肯定工夫内至多执行肯定数量的写操作时,就主动保留快照;可设置多个条件。

(1)如果想禁用 RDB 长久化的策略,只有不设置任何 save 指令,或者给 save 传入一个空字符串参数也能够

(2)如果用户开启了 RDB 快照性能,那么在 Redis 长久化数据到磁盘时如果呈现失败,默认状况下,Redis 会进行承受所有的写申请。这样做的益处在于能够让用户很明确的晓得内存中的数据和磁盘上的数据曾经存在不统一了。如果下一次 RDB 长久化胜利,redis 会主动复原承受写申请。

2:dbfilename:数据快照文件名(只是文件名,不包含目录),默认 dump.rdb

3:dir:数据快照的保留目录(这个是目录),默认是以后门路

4:stop-writes-on-bgsave-error:如果配置成 no,示意你不在乎数据不统一或者有其余的伎俩发现和管制这种不统一,那么在快照写入失败时,也能确保 redis 持续承受新的写申请

5:rdbcompression:对于存储到磁盘中的快照,能够设置是否进行压缩存储。如果是的话,redis 会采纳 LZF 算法进行压缩。如果你不想耗费 CPU 来进行压缩的话,能够设置为敞开此性能

6:rdbchecksum:在存储快照后,还能够让 redis 应用 CRC64 算法来进行数据校验,然而这样做会减少大概 10% 的性能耗费,如果心愿获取到最大的性能晋升,能够敞开此性能

7:rdb-del-sync-files:在没有持久性的状况下删除复制中应用的 RDB 文件启用。默认状况下,此选项是禁用的。

RDB 长处

    适宜冷备份、高性能、复原数据快

RDB 的问题

1:fork 一个过程时,内存的数据也被复制了,即内存会是原来的两倍

2:每次快照长久化都是将内存数据残缺写入到磁盘一次,并不是增量的只同步脏数据。如果数据量大的话,而且写操作比拟多,必然会引起大量的磁盘 io 操作,可能会重大影响性能。

3:因为快照形式是在肯定间隔时间做一次的,所以如果 redis 意外 down 掉的话,就会失落最初一次快照后的所有批改。

触发快照的状况

1:依据配置规定进行主动快照
2:用户执行 save 或 bgsave 命令
3:执行 flushall 命令
4:执行复制 replication 时

save 命令

执行 Save 命令时,Redis 会阻塞所有客户端的申请,而后同步进行快照操作。

bgsave 命令

执行 bgsave 命令时,Redis 会在后盾异步进行快照操作,快照同时还能够响应客户端申请。能够通过 lastsave 命令获取最初一次胜利执行快照的工夫。

flushall 命令

这个命令会导致 Redis 革除内存中的所有数据,如果定义了主动快照的条件,那么无论是否满足条件,都会进行一次快照操作;如果没有定义主动快照的条件,那么不会进行快照

后记

我会继续的把我学习 Redis6.x 过程的笔记记录下来,跟大家一起学习。心愿能坚持下去!

正文完
 0