Redis(六)

Redis的持久化

Redis 为什么要持久化?

Redis 中的数据类型都支持 push/pop、add/remove 及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,Redis 支持各种不同方式的排序。与 Memcached 一样,为了保证效率,数据都是缓存在内存中。

对,数据都是缓存在内存中的,当你重启系统或者关闭系统后,缓存在内存中的数据都会消失殆尽,再也找不回来了。所以,为了让数据能够长期保存,就要将 Redis 放在缓存中的数据做持久化存储。

Redis提供了2种不同形式的持久化方式

RDB(Redis Database)

AOF (Append Of File)

RDB

在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复是将快照文件直接读到内存里。

备份如何执行的

Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换

到上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能如果需要进行大规模数据恢复操作,且对于

数据恢复的完整性不是很敏感,那么RDB方式要比AOF方式更加的高效。RDB的缺点是最后一次持久化后的数据可能丢失(正常退出如shutdown会完整保存)。

关于fork

在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会被exec系统调用,出于效率考虑,Linux中引入了“写时复制技术”(需要写的时候再复制),

一般情况父进程和子进程会共用同一段物理内存,只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程。

RDB的保存文件

在redis.conf中配置文件名称,默认为dump.rdb

dbfilename dump.rdb

rdb文件的保存路径,也可以修改,默认为./,也就启动redis的当前路径下

dir ./

rdb的保存策略

save seconds changes 多少秒之内完成对数据库的多少次更改之后就会持久化

save 900 1 在900秒完成一次对数据库的更改就会进行持久化

命令save

只管保存,其他不管,对Redis的所有操作全都阻塞

stop-writes-on-bgsave-error yes

当Redis无法写入磁盘的话,直接关掉Redis的写操作。

rdbcompression yes

进行rdb保存时,将文件压缩

rdbchecksum yes

在存储快照后,还可以将Redis用CRC64算法来进行数据的校验,以检查数据是否准确,但这样会增加大约10%的性能消耗,如果希望获取到最大性能,可以关闭此功能

rdb的备份

先通过config get dir 查询rbd文件的目录

将*.rbd的文件拷贝到别的地方

rdb的恢复

关闭Redis

先把备份的文件拷贝到工作目录下

启动Redis,备份文件会直接加载

rdb的优点:

节省磁盘空间

恢复速度快

rdb的缺点:

虽然使用了写时拷贝技术,但数据太大时还是会消耗性能

备份周期在一定间隔时间做一次备份,如果Redis意外down掉,就会丢失最后一次快照后的所有修改,就是我之前所说的RDB的缺点是最后一次持久化后的数据可能丢失

rdb与aof

rdb保存的数据,aof保存的指令

AOF

以日志的形式来记录每个写操作,通过执行日志文件的指令完成数据恢复工作

AOF默认不开启,需要手动在配置文件中配置

appendonly no

可以在redis.conf中配置文件名称,默认为appendonly.aof

appendfilename "appendonly.aof"

AOF文件的保存路径,同rdb文件一致

dir ./ #这个配置对rdb有用,对aof也有用#

aof和rdb同时开启,Redis会听谁的?

以AOF为准

AOF文件故障备份

AOF的备份机制和性能虽然和RDB不同,但是备份和恢复的操作同RDB一样,都是拷贝备份文件,需要恢复时再拷贝到Redis工作目录下,启动系统即加载

AOF和RDB同时开启,系统默认取AOF的数据

AOF文件故障恢复

AOF文件的保存路径与RDB文件的保存路径一致

如遇到AOF文件损坏,可通过

redis-check-aof --fix appendonly.aof 进行恢复(基本没啥屌用)

AOF同步频率设置

始终同步,每次Redis的写入都会立刻记入日志

每秒同步,每秒记入日志一次,如果宕机,本秒的数据可能丢失

不主动进行同步,把同步时机交给OS(操作系统)

appendfsync always 始终同步

appendfsync everysec 每秒同步

appendfsync no 不主动进行同步

Rewrite

AOF采用文件追加方式,由于指令的增多,文件会越来越大,为避免出现此种情况,新增重写机制,当AOF文件大小超过所设定的阈值时

Redis就会启动AOF文件的内容压缩,只保留可恢复数据的最小指令集,可以使用命令bgrewriteaof

 

AOF优点

备份机制更稳定,丢失数据概率低

可读的日志文本,通过操作AOF,可以处理误操作,比如flushdb就是写指令

AOF的缺点

比RDB占用更多的磁盘空间

恢复备份速度更慢

每次读写都同步的话,有一定性能压力

存在个别BUG,可能会造成不恢复

原文地址:https://www.cnblogs.com/qyx66/p/12207793.html