0.redis持久化
1.RDB模式
2.AOF模式
0.redis 持久化
redis 虽然是一个内存级别的缓存程序,即 redis 是使用内存进行数据的缓存的,但是其可以将内存
的数据按照一定的策略保存到硬盘上,从而实现数据持久保存的目的, redis 支持两种不同方式的数据
持久化保存机制,分别是 RDB 和 AOF
RDB持久化.jpg
1.RDB模式
1.1实现过程
实现的具体过程 Redis 从主进程先 fork 出一个子进程,使用写时复制机制,子进程将内存的数据保存为一个临时文件,比如 dump.rdb.temp,
当数据保存完成之后再将上一次保存的RDB文件替换掉,然后关闭子进程,这样可以保存每一次做RDB快照的时候保存的数据都是完整的,
因为直接替换RDB文件的时候可能会出现突然断电等问题而导致 RDB 文件还没有保存完整就突然关机停止保存而导致数据丢失的情况,
可以手动将每次生成的 RDB 文件进程备份,这样可以最大化保存历史数据。
基于时间的快照, 只保留当前最新的一次快照, 特点是执行速度比较快,缺点是可能会丢失从上次快照到当前快照未完成之间的数据。
1.2RDB 模式的优缺点
优点
1.RDB快照保存了某个时间点的数据,可以通过脚本执行 bgsave(非阻塞)或者 save(阻塞)命令自定义时间点北备份,可以保留多个备份,当出现问题可以恢复到不同时间点的版本。
2.可以最大化IO的性能,因为父进程在保存 RDB 文件的时候唯一要做的是 fork 出一个子进程,然后的操作都会有这个子进程操作,父进程无需任何的IO操作RDB 在大量数据比如几个G的数据,恢复的速度比AOF的快
缺点
不能时时的保存数据,会丢失自上一次执行 RDB 备份到当前的内存数据
数据量非常大的时候,从父进程 fork 的时候需要一点时间,可能是毫秒或者秒
2.AOF 模式
2.1介绍
1.按照操作顺序依次将操作添加到指定的日志文件当中,特点是数据安全性相对较高, 缺点是即使有些操作是重复的也会全部记录。
2.AOF和RDB一样使用了写时复制机制,AOF 默认为每秒钟fsync一次,即将执行的命令保存到AOF文件当中,这样即使redis服务器发生故障的话顶多也就丢失
1秒钟之内的数据,也可以设置不同的 fsync策略,或者设置每次执行命令的时候执行 fsync,fsync 会在后台执行线程,所以主线程可以继续处理用户的
正常请求而不受到写入 AOF 文件的 IO 影响
2.2AOF 模式优缺点
AOF的文件大小要大于 RDB 格式的文件,根据所使用的 fsync 策略(fsync 是同步内存中 redis 所有已经修改的文件到存储设备),默认是appendfsync everysec
即每秒执行一次 fsync
网友评论