博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redis 入门指南(三)持久化
阅读量:3905 次
发布时间:2019-05-23

本文共 1767 字,大约阅读时间需要 5 分钟。

3. 持久化

3.1 RDB方式

        根据指定的规则“定时”,将内存中的数据存储在硬盘上;通过快照(snapshotting)实现,当符合一定条件时,Redis会自动将内存中的数据生成一份副本并存储在硬盘上,这个过程即为“快照”。

3.1.1 进行快照的4种情况

1. 根据配置规则进行自动快照,条件之间是“或”的关系

        每15分钟内有一个或一个以上的键被修改

        每5分钟至少有10个键被修改

        每一分钟至少有10000个键修改

2. 用户执行SAVE或BGSAVE命令(手动)

        SAVE,同步进行快照,会阻塞所有来着客户端的请求(不推荐使用)

        BGSAVE,在后台异步进行快照操作,还可以继续响应客户端的请求,执行LASTSAVE命令获取最近一次成功执行快照的时间,查看快照是否完成。

3. 执行FLUSHALL命令

        执行FLUSHALL命令,会清除数据库中的所有数据,当没有定义自动快照条件时,执行FLUSHALL不会进行快照

4. 执行复制时

        当设置了主从模式,Redis会在复制初始化时进行自动快照。

3.1.2 快照原理

        Redis默认会将快照文件存储在Redis当前进程的工作目录中的dump.rdb文件中,可以通过配置dir和dbfilename两个参数分别指定快照文件的存储路径和文件名。

快照过程

1. Redis使用fork函数复制一份当前进程(父进程)的副本(子进程);

2. 父进程继续接收并处理客户端发来的命令,而子进程开始将内存中的数据写入硬盘中的临时文件‘

3. 当子进程写入完所有数据后会用该临时文件替换旧的RDB文件,至此一次快照操作完成。

提示

        Redis在进行快照的过程中不会修改RDB文件,只有在快照结束后才会将旧的文件替换成新的,所以任何时刻RDB文件都是完整的;

        Redis启动后会读取RDB快照文件,将会数据从硬盘载入内存;

        一旦Redis异常退出,就会丢失最后一次快照以后更改的所有数据。

3.2 AOF模式

        每次执行命令后将命令本身记录下来。

        当使用Redis存储非临时数据时,一般需要打开AOF持久化来降低进程中止导致的数据丢失。AOF可以将Redis执行的每条写命令追加到硬盘文件中,这一过程显然会降低Redis的性能,但是大部分情况下这个影响是可以接受的,另外使用较快的硬盘可以提高AOF的性能。

3.2.1 开启AOF

默认不开启

appendonly yes 开启

appendfilename appendonly.aof  文件名,文件夹和RDB一样,通过dir参数设置

3.2.2 AOF重写

如在以下命令中,前两条其实都是冗余的。

AOF文件的内容正是Redis客户端向Redis发送的原始通信协议的内容。

当满足一定条件时,进行AOF重写

        auto-aof-rewrite-percentage 100

        auto-aof-rewrite-min-size 64mb

        percentage:当目前的AOF文件大小超过上一次重写时的AOF文件大小的百分之多少时会再次进行重写,如果之前没有重写过,则以启动时AOF文件大小为依据;

        min-size:限制允许重写的最小AOF文件大小;

        还可以执行BGREWRITEAOF命令手动执行AOF重写。在启动时,Redis会逐个执行AOF文件中的命令来将硬盘中的数据载入到内存中,载入速度较RDB会慢一些。

3.2.3 同步硬盘数据

        将命令记录在AOF文件中,由于操作系统的缓存机制,数据并没有真正地写入硬盘,而是进入了系统的硬盘缓存。在默认情况下,系统每30秒会执行一次同步操作,以便将硬盘缓存中的内容真正地写入硬盘,在这30秒中如果系统异常退出则会导致硬盘缓存中的数据丢失。

        这就需要Redis在写入AOF文件后主动要求系统将缓存内容同步到硬盘中。

        appendfsync always #每次执行写入都会执行,最安全最慢;

        appendfsync everysec #每秒执行一次同步操作(默认)
        appendfsync no #不主动执行同步操作,而是完全交由操作系统来做(即每30秒一次)

        允许同时开启AOF和RDB,既保证了数据安全又使得进行备份等操作十分容易。重新启动会使用AOF文件来恢复数据,因为此方式可能丢失的数据更少。

转载地址:http://ppqen.baihongyu.com/

你可能感兴趣的文章
认知仿真:是复杂系统建模的新途径吗
查看>>
大数据时代下数据挖掘技术的应用
查看>>
大数据分析与应用技术创新平台
查看>>
安全态势感知
查看>>
菜鸟下一代分布式体系架构的设计理念
查看>>
漫谈 · 比知行合一更重要的是意行合一
查看>>
漫谈 · 软件设计中的具象化
查看>>
漫谈 · 软件中的不确定
查看>>
癃闭病以及其常见药方
查看>>
人生就是不断学习和修行-2018年个人总结
查看>>
开源代码学习技巧-Nats源码原理分析
查看>>
开源代码学习-nsq(v0.1.1版本)源码分析
查看>>
开源代码学习-nsq(v0.1.5版本)源码分析
查看>>
开源代码protoactor-go[e866f39]源码分析
查看>>
开源代码protoactor-go源码分析-async schedule
查看>>
开源代码TarsGo-v1.0.0源码分析之transport
查看>>
开源代码memberlist源码分析
查看>>
本人公众号技术文章目录-持续更新
查看>>
qt.network.ssl: QSslSocket: cannot call unresolved function
查看>>
Qt 记录
查看>>