RDB方式介绍

RDB方式是通过快照完成的,当符合一定条件时Redis会自动将内存中的所有数据进行快照,并且存储到硬盘上。就像拍照一样,将这一瞬间的所有东西都保存下来。进行快照的条件在配置文件中指定。主要有两个参数构成:时间和改动的键值的个数,即当在指定时间内被更改的键的个数大于执行数值时,就会进行快照。RDB是Redis的默认持久化方式。

RDB方式配置

找到Redis的配置文件:redis.conf
1) 设置触发条件:

redis持久化默认哪种 redis持久化设置_Redis


redis持久化默认哪种 redis持久化设置_java_02

RDB相关配置:

stop-writes-on-bgsave-error yes // 后台备份进程出错时,主进程停不停止写入?  主进程不停止 容易造成数据不一致
rdbcompression yes // 导出的rdb文件是否压缩    如果rdb的大小很大的话建议这么做
Rdbchecksum yes // 导入rbd恢复时数据时,要不要检验rdb的完整性 验证版本是不是一致   
dbfilename dump.rdb //导出来的rdb文件名
dir ./ //rdb的放置路径

2) 设置rdb文件路径

默认rdb文件存放路径是当前目录,文件名是:dump.rdb。可以在配置文件中修改路径和文件名,分别是dir和dbfilename

redis持久化默认哪种 redis持久化设置_redis_03

Redis启动后会读取RDB快照文件,将数据从硬盘载入到内存,一般情况下1GB的快照文件载入到内存的时间大约20-30分钟。

RDB如何进行快照

RDB的快照过程:
1) Redis使用fork函数复制一份当前进程(父进程)的副本;

2) 父进程继续接受并处理客户端发来的命令,而子进程开始将内存中的数据写入到硬盘中的临时文件;

3) 当子进程写入完成所有数据后会用该临时文件替换旧的RDB文件。
手动快照:
如果没有触发自动快照,可以对redis进行手动快照操作,SAVE和BGSAVE都可以执行手动快照,两个命令的区别是前者是由主进程进行快照操作,会阻塞其他请求;而后者是通过fork子进程进行快照操作。

注意
由于redis使用fork来复制一份当前进程,那么子进程就会占有和主进程一样的内存资源,比如说主进程8G内存,那么在备份的时候必须保证有16G内存,要不然会启用虚拟内存,性能非常差。

RDB文件的压缩

RDB文件过大时,是可以压缩的,Redis默认开启压缩,当然也可以通过配置rdbcompression参数来禁用压缩。

redis持久化默认哪种 redis持久化设置_redis_04

压缩和不压缩的优缺点:
压缩

1.优点:减少磁盘存储空间
2.缺点:消耗CPU资源

不压缩

1.优点:不消耗CPU资源
2.缺点:占用磁盘空间多
在2个保存点之间,断电,将会丢失1-N分钟的数据 ,对于商业上面的应用,丢失的数据就是个disaster。     但是这个方式下 数据恢复的比较快。   建议使用 rdb 跟 aof 配合使用。
出于对持久化的更精细要求,redis增添了aof方式 append only file

Aof

AOF(append only file)持久化以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中命令 达到恢复数据的目的。与RDB相比可以简单理解为由记录数据改为记录数据产生的变化

AOF的主要作用是解决了数据持久化的实时性,目前已经是Redis持久化的主流方式

redis持久化默认哪种 redis持久化设置_java_05

1:每个命令重写一次aof?
是 当然还有重写规则 aof文件过大的话 ,触发重写,gbwrite 。

2:某key操作100次,产生100行记录,aof文件会很大,怎么解决?
配置 aof 主要记录执行的命令 aof文件的路径直接修改 跟 rdb不一样 rdb 修改有单独的配置选项:dir选项。

appendonly no // 是否打开aof日志功能     aof跟  rdb都打开的情况下 
appendfsync always // 每1个命令,都立即同步到aof. 安全,速度慢
appendfsync everysec // 折衷方案,每秒写1次
appendfsync no // 写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到aof. 同步频率低,速度快,

no-appendfsync-on-rewrite yes: // 正在导出rdb快照的过程中,要不要停止同步aof
auto-aof-rewrite-percentage 100 //aof文件大小比起上次重写时的大小,增长率100%时,重写    缺点  刚开始的时候重复重写多次
auto-aof-rewrite-min-size 64mb //aof文件,至少超过64M时,重写

配置好以上文件之后测试使用 redis-benchmark -n 10000 表示 执行请求10000次,执行ls 发现出现 rdb 跟 aof文件。appendonly.aof dump.rdb

注意的事项

注: 在dump rdb过程中,aof如果停止同步,会不会丢失?
答: 不会,所有的操作缓存在内存的队列里, dump完成后,统一操作.

注: aof重写是指什么?
答: aof重写是指把内存中的数据,逆化成命令,写入到.aof日志里.
以解决aof日志过大的问题.

问: 如果rdb文件,和aof文件都存在,优先用谁来恢复数据?
答: aof

问: 2种是否可以同时用?
答: 可以,而且推荐这么做

问: 恢复时rdb和aof哪个恢复的快
答: rdb快,因为其是数据的内存映射,直接载入到内存,而aof是命令,需要逐条执行