redis的持久化
redis 持久化的概念
Redis 是一个支持持久化的内存数据库,也就是说Redis需要经常将内存中的数据同步到磁盘来保证持久化。Redis支持两种持久化方式,一种是Snapshotting(快照)也是默认方式,另一种是Append-Only File(缩写AOF)的方式。
#####################RDB#############
1、Snapshotting(RDB)机制以及运行原理
在某一时刻点保存一个完整的数据快照。
原理:
1、Redis通过fork产生子进程
2、父进程继续处理client请求,子进程负责将快照写入临时文件
3、子进程写完后,用临时文件替换原来的快照文件,然后子进程退出。
2、Snapshotting机制的配置
1、编辑redis.conf文件 2、文件中添加 save 900 1 #900秒超过1个key被修改 save 300 10 #300秒超过10个key被修改 save 60 10000 #60秒超过10000条被修改
#################AOF##############
1、Append-Only File(AOF)机制
每一个写操作,将写入log文件,用于数据恢复(写操作包括:insert,delete,update)
2、Append-Only File(AOF)机制运行原理
1、Redis 通过fork一个子进程 2、父进程继续处理client请求,子进程把AOF内容写入缓存区 3、子进程写完退出,父进程接收退出信息,将缓冲区AOF写入临时文件 4、临时文件重命名成appendonly.aof,原来文件被覆盖,整个过程完成
3、Append-Only File(AOF)机制配置
1、编辑redis.conf文件 2、在文件中添加 appendonly yes #启动AOF机制 appendsync always #每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用 appendsync everysec #每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐使用 appendsync no #完全依赖os,性能最好,持久化没保证
RDB与AOF两种方式比较
Snapshotting 优势: 1、RDB产生的文件小 2、RDB恢复快,并且简单,例如你可以快速的将RDB文件传输到其他主机,做数据的恢复 3、在进行RDB备份时,主进程仅仅需要创建一个子进程,所有的I/O操作都由子进程完成 缺陷: 1、不能完全保证数据安全,在两个备份点之间可能会发生数据丢失 2、当数据量很大时,创建子进程可能会是一个非常耗时的操作,甚至可能需要1秒,在这个期间,Redis无法向客服端提供服务 AOF 优势: 1、数据备份粒度小,数据安全性更高 2、AOF只会对日志文件进行追加操作,不会修改已经写好的内容。即使在掉电的情况下,AOF日志仍然是可用的。 缺陷: 1、AOF文件通常比相同的数据集的RDB文件更大 2、AOF写日志可能会比较慢,这跟fsync的机制有关
总结:RDB快照易丢失数据,AOF模式比较安全,但日志重写时,磁盘IO开销大,容易导致服务器性能严重下降,并且需要足够的物理内存。
本文来自博客园,作者:小白啊小白,Fighting,转载请注明原文链接:https://www.cnblogs.com/ywjfx/p/10263269.html