Redis 入门四:数据持久化
主要内容:
本篇内容主要讲解 Redis 的数据持久化,包括持久化方式和其他注意事项
持久化:
首先要知道什么是持久化:虽然说 Redis 经常是作为缓存来使用,但是还是要把数据从内存中持久化到硬盘中,以此来应对服务器突然宕机导致数据丢失。
持久化方式:
Redis 主要有两种数据持久化方式:
RDB(Redis DataBase)
AOF(Append of File)
RDB 持久化:
RDB 持久化:在指定的时间间隔内将内存中的所有数据的快照写入到硬盘中,即 snapshot 快照,数据恢复的时候是将快照文件直接读入到内存中。
持久化步骤:Redis 会单独创建(fork)一个子进程来进行数据的持久化,因此不影响数据的读写。这个子进程会先把数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程主进程不进行任何 IO 操作,因此确保了极高的性能。如果要进行大规模数据恢复,并且对数据恢复的完整性不敏感,RDB 方式比 AOF 方式高效,其缺点就是最后一次持久化后的数据可能丢失。为什么最后一次可能丢失呢?因为 RDB 是隔一段时间进行持久化,比如 20s 有 10 个数据发生变化,就会进行一次持久化,如果在第 2 个 20s 只有 5 个数据发生变化,因此不会持久化,这时服务器突然断电,就会导致数据丢失。
现在再来说说 fork 的作用:fork 的作用就是复制一个与当前进程一样的进程,新进程的所有数据(变量,环境变量,程序计数器等)数值都和原进程一样,但是是一个全新的进程,并作为原进程的子进程。在持久化中用到了写时复制技术。
AOF 持久化:
AOF 持久化:以日志的形式来记录每个写操作(增量保存:就是在后面追加,有新操作,只把新操作添加进去)将 Redis 执行过的所有写操作记录下来,读操作不记录,只允许追加问阿金,不可以改写文件。Redis 在启动之初,会读取该文件重新构建数据库,换句话说,重启之后,就根据日志文件的内容将写指令从前到后执行一次,以完成数据的回复工作。
小贴士:当 Redis 同时开启 RDB 和 AOF 时,Redis 重启后,会读取 AOF 文件。
AOF 可以进行同步频率设置:
appendfsync always:始终同步
appendfsync everysec:每秒同步
appendfsync no:不主动进行同步,把同步时机交给操作系统
AOF 利用追加的方式,文件会越来越大,为避免此情况,新增重写机制,当 AOF 文件的大小超过所设定的阈值时,redis 会启动文件压缩,只保留可以恢复数据的最小指令集。
版权声明: 本文为 InfoQ 作者【打工人!】的原创文章。
原文链接:【http://xie.infoq.cn/article/b8ca78810c90aa42a02899e61】。文章转载请联系作者。
评论