本文共 2191 字,大约阅读时间需要 7 分钟。
- Redis的持久化之一 : RDB(Redis Database):
- 介绍:
- 在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读入到内存里
- 执行机制:
- 1,Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能,如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式比AOF方式更加高效。RDB的缺点是最后一次持久化的数据可能丢失
- 2,关于fork: 在linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,linux中引入了“写时复制技术”,一般情况父进程和子进程会共用同一段物理内存,只有进程空间的各段的内容要发生变换时,才会将父进程的内容复制一份给子进程
- rdb保存的文件:
- 1,在redis.conf中配置文件名称,默认为dump.rdb
- 2,rdb文件的保存路径,也可以修改。默认为Redis启动时命令所在的目录下,但是可以自定修改
- rdb保存策略:
- rdb手动保存快照
- 1,命令save:只管保存,其他不管,全部阻塞
- 2,Save vs bgsave:
- 2.1,Stop-writes-on-bgsave-error yes:当redis无法写入磁盘的话,直接关掉redis的写操作
- 2.2,Rdbcompression yes:进行rdb保存时,将文件压缩
- 2.3,Rdbchecksum yes:在存储快照后,还可以让redis使用CRC64算法来进行数据校验,但是这样做会增加大约10%的性能消耗,如果希望获取到最大的性能提升,可以关闭此功能
- rbd的备份:
- 将生成的dump.rdb文件拷贝到安全备份的目录下即可
- rdb的恢复:
- 1,关闭redis服务
- 2,将之前备份的dump.rdb文件拷贝到工作目录下
- 3,启动redis服务,备份数据会自动加载
- rdb优点:
- 节省磁盘空间,恢复速度快
- rdb缺点:
- 1,隔一段时间做一次备份,所以redis意外down掉的话,就会丢失最后一次快照的后的所有修改
- 2,虽然redis在fork时使用了写时复制技术,但是如果数据量庞大时,还是会占用cpu性能
===================================
- Redis的持久化之二 :AOF(append of file)
- 介绍:
- 1,以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件,但不许改写文件,Redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次,以完成数据的恢复工作
- 2,AOF默认不开启,需要手动在配置文件中配置,可以在redis.conf中配置文件名称,默认为appendonly.aof
- AOF文件故障备份:
- 1,AOF的备份机制和性能虽然和RDB不同,但是备份和恢复的操作同RDB一样,都是拷贝备份文件,需要恢复时再拷贝到redis工作目录下,启动系统即加载
- 2,AOF和RDB同时开启,系统 默认取AOF的数据
- 3,AOF文件故障恢复:
- 3.1,AOF文件的保存路径和RDB一致
- 3.2,如遇到AOF文件损坏,可通过redis-check-aof --fix appendonly.aof 命令进行恢复
- AOF同步频率设置:
- 1,始终同步,每次redis写入都会立刻记入日志
- 2,每秒同步,每秒记入日志一次,如果宕机,本秒的数据可能丢失
- 3,不主动进行同步,把同步时机交给操作系统
- Rewrite:
- AOF采用文件追加方式,文件会越来越大,为避免出现此种情况,新增了重写机制,当AOF文件的大小超过所设定的阈值时,redis就会启动aof文件的内容压缩,只保留可以恢复数据的最小指令集,可以使用命令bgrewriteaof
- AOF如何实现重写(重新生成全局aof持久化文件):
- AOF文件持续增长而过大时,会fork出一条新进程来将文件重写(也是先写临时文件最后再rename),遍历新进程的内存中数据,每条记录有一条的Set语句。重写aof文件的操作,并没有读取旧的aof文件,而是将整个内存中的数据库内容用命令的方式重写了一个新的aof文件,这点和快照有点类似
- 何时重写:
- 1,重写虽然可以节约大量的磁盘空间,减少恢复时间,但是每次重写还是有一定的负担的,因此设定redis要满足一定条件才会进行重写
- 2,系统载入时或者上次重写完毕时,redis会记录此时aof持久化文件大小,设为base_size,如果redis的aof当前大小大于等于base_size +base_size*100% (默认)且当前大小>=64mb(默认)的情况下,Redis会对AOF进行重写
- AOF优点:
- 备份机制更稳健,丢失数据概率更低,可读的日志文本,通过操作AOF稳健,可以处理误操作
- AOF缺点:
- 1,比起RDB占用更多的磁盘空间
- 2,恢复备份速度更慢
- 3,每次读写都同步的话,有一定的性能压力
- 4,存在个别Bug,造成无法恢复
转载地址:http://ogixl.baihongyu.com/