Redis持久化方案
Reid是一个内存数据库,为了保证数据库的持久性,它提供两种持久化方案:
RDB方式(默认)
ADF方式
1.RDB方式
介绍
RDB是Redis默认采用的持久化方式
RDB方式是通过快照(snapshotting)完成的,当符合一定条件时Redis会自动将内存中的数据进行快照并持久化到硬盘。
Redis会在指定的情况下触发快照
1.符合自定义配置的快照规则
2.执行save或者bgsave命令
3.执行flushall命令
4.执行主从复制操作
在redis.conf中设置自定义快照规则
1.2.RDB持久化条件
格式:SAVE<SECONDS><CHANGES>
示例:
save 900 1 : 表示15分钟(900秒钟)内至少一个键被更改则进行快照
save 300 10 : 表示5分钟(300秒)内至少10个键被更改则进行快照
save 60 10000:表示1分钟内至少10000个键被更改则进行快
可以配置多个条件(每行配置一个条件),每个条件之间是"或"的关系
1.3.配置dirzhidingrdb快照文件的位置
特别说明:
Redis启动后会读取RDB快照文件,将数据从硬盘载入到内存,
根据数据量大小与结构和服务器性能不同,这个时间也不同,通常将记录一千万个字符串类型键,大小为1GB的快照文件载入到内存中需要花费20-30秒钟
1.4.快照的实现原理
快照过程
1.4.1.redis使用fork寒素复制一份当前进程的副本(子进程)
1.4.2.父进程继续接受并处理客户端发来的命令,而子进程开始将
内存中的数据写入硬盘中的临时文件。
1.4.3.当子进程写入所有数据后会用该临时文件替换旧的 RDB
文件,至此,一次快照操作完成.
注意事项:
1.redis在进行快照的过程中不会修改RDB文件,只有快照结束后才会将旧的文件替换成新的,也就是说任何时候RDB文件都是完成的
2.这就使得我们可以通过定时备份RDB文件来实现redis数据库的备份,RDB文件经过压缩的二进制文件,占用的空间会小于内存中的数据,更加利于传输
2.AOF方式
2.1介绍
默认情况下Redis没有开启AOF(append only file)方式的持久化
开启ADF持久化后每一条会更改Redis中的数据命令,Redis就会将该命令写入硬盘中的ADF文件,这一过程显然会减低redis的性能,但大部分情况下这个影响是能够接受的,另外使用较快的硬盘可以提高ADF的性能。
可以通过修改redis.conf配置文件中的appenly参数开启
appendonly yes
ADF文件的保存位置和RDB文件的位置相同,都是通过dir参数设置的
dir./
默认的文件名是appendonly.conf,可以通过appendfilename参数修改
appendfiename appenly.aof
2.2.AOF重写原理
Redis可以在AOF文件体积变大得过时,自动在后台对AOF进行重写
重写后的新ADF文件包含了恢复当前数据集说需要的最小命令集合
整个重写操作是绝对安全的,因为Redis在创建新ADF的过程中,会继续
将命令追加到现有的ADF文件里面,及时重写过程中发生停机,现有的ADF文件也不会
丢失。而一旦新ADF文件创建完毕,Redis就会从旧ADF文件换到新ADF文件,并且对新
ADF文件进行追加操作。
ADF文件有序地保存了对数据库执行的所有写入操作,这些写入操作以Redis协议的格式
保存,因此ADF文件的内容非常容易被人读懂,对文件进行分析(parse)
参数说明
auto-aof-rewrite-percentage 100表示当前aof文件大小超过上一次文件大小
的百分之多少的时候会进行重写,如果之前没有重写过,表示当前aof文件大小为准
auto-aof-rewriter-min-size 64mb 限制允许重写最小aof文件大小,也就是文化大小小于64mb的时候,不需要进行优化
3.同步磁盘数据
Redis每次更改数据的时候,aof机制都会将命令记录到aof文件,但是实际上由于操作系统的缓存机制
数据并没有实时写入到硬盘,而是进入硬盘缓存,再通过缓存机制去刷新保存到文件
参数说明:
appendfsync always 每次执行写入都会进行同步,这是最安全但是效率比较低的方式
appendfsync everysec 每一秒执行
appendfsync no 不主动进行同步操作,由系统去执行,这个是最快但是最不安全的方式