其实在我们工作中也有多持久化场景,比如word。它的持久化形式是以~$论文.docx的形式来持久化。
网站建设哪家好,找创新互联!专注于网页设计、网站建设、微信开发、微信小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了绥宁免费建站欢迎大家使用!
那么在Redis中为了防止数据意外丢失,确保数据安全,也会进行持久化。
利用永久性存储介质将数据进行保存,在特定的时间将保存的数据进行恢复的工作机制称为持久化。
在Redis中有两种持久化方式:RDB(Redis DataBase)、AOF(Append Only File)。
RDB(Redis DataBase)将当前数据状态进行保存,快照形式,存储数据结果,存储格式简单,关注点在数据。
AOF(Append Only File)将数据的操作过程进行保存,日志形式,存储操作过程,存储格式复杂,关注点在命令。
在Redis中可以使用save命令来执行一次RDB持久化操作.
save指令相关配置:
- dbfilename.dump.rdb
- 说明:设置本地数据库文件名,默认值为dump.rdb
- dir
- 说明:设置存储.rdb文件的路径
- rdbcompression yes
- 说明:设置存储至本地数据库时是否压缩数据,默认为yes,采用LZF压缩
- rdbchecksum yes
- 说明:设置是否进行RDB文件格式校验,该校验在写文件和读文件过程均进行
我们知道早期Redis版本是单线程的。当我们执行save命令时会阻塞当前Redis服务器,直到RDB过程完成为止,有可能会造成长时间阻塞,线上环境不建议使用。
那么问题来了,既然使用save会对线上服务器造成影响,那么有没有一种更好的持久化方式呢?答案是有的,那就是bgsave.
通过名称可以看出这个持久化操作是后台执行的,不会导致Redis发生阻塞。
下面看一下bgsave的工作原理:
可以看出,当执行bgsave命令后Redis会fork出一个子进程,用于创建RDB文件进行持久化,这样一来就不会阻塞Redis了。但是bgsave不会立即执行,且会消耗额外的CPU资源。
bgsave命令是针对save阻塞问题做的优化。Redis内部所有涉及到RDB操作都采用bgsave的方式,save命令可以放弃使用。
bgsave指令相关配置:
- dbfilename.dump.rdb
- 说明:设置本地数据库文件名,默认值为dump.rdb
- dir
- 说明:设置存储.rdb文件的路径
- rdbcompression yes
- 说明:设置存储至本地数据库时是否压缩数据,默认为yes,采用LZF压缩
- rdbchecksum yes
- 说明:设置是否进行RDB文件格式校验,该校验在写文件和读文件过程均进行
- stop-writes-on-bgsave-error yes
- 说明:后台存储如果出现错误,是否停止保存操作
那么问题又来了,我们不可能一直手动去执行或者bgsave指令,这时Redis为我们提供了自动执行bgsave的功能。
在Redis的配置文件中有这么一个配置save [secone] [changes]可以帮助我们自动进行持久化。
- 配置:
- save second changes
- 作用:
- 满足限定时间范围内key的变化数量达到指定数量即进行持久化
- 参数:
- second:监控时间范围
- changes:监控key的变化量
- 位置:
- 在conf文件中进行配置
- 范例:
- save 900 1
- save 300 10
- save 60 10000
注意: save配置要根据实际业务情况进行设置,频度过高或过低都会出现性能问题,结果可能是灾难性的 save配置中对于second与changes设置通常具有互补对应关系,尽量不要设置成包含性关系 save配置启动后执行的是bgsave操作
RDB三种持久化方式对比:
RDB的优点:
RDB的缺点:
AOF(Append Only File)持久化,以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中的命令达到恢复数据的目的。与RDB相比可以简单描述为数据产生的过程。
AOF主要作用是解决了持久化的实时性,目前已经是Redis持久化的主流方式。
在把AOF命令缓冲区同步到文件时有三种写数据策略(appendfsync):
- always(每次)
- 每次写入操作均同步到AOF文件中,数据零误差,但性能较低
- everysec(每秒)
- 每秒将缓冲区中的指令同步到AOF文件中,数据准确性较高,性能也较高
- 在系统突然宕机是会丢失1秒内的数据
- no(系统控制)
- 由操作系统每次同步到AOF文件的周期,整体过程不可控
配置:
- appendonly yes|no
- 作用:是否开启AOF持久化,默认为不开启状态
- appendfsync always|everysec|no
- 作用:AOF同步命令数据策略
- appendfilename filename
- AOF持久化文件名,默认文件名为appendonly.aof,建议配置成appendonly-端口号.aof
假如同步策略是 appendfsync everysec每秒同步一次,执行如下命令:
- set name zhangsan
- set name lisi
- set name wangwu
最终AOF文件里将只有一条:
- set name wangwu
随着AOF文件不断写入,AOF文件会越来越大,为了解决这个问题,Redis引入了AOF重写机制压缩文件体积。
AOF文件重写是将Redis进程内的数据转化为写命令同步到新AOF文件的过程。简单说就是将若干条命令执行结果转化成最终结果数据对应的指令进行记录。
- del key1
- hdel key2
- 如下命令:
- lpush list1 a、lpush list1 b、 lpush list1 c
- 可以转化为:
- lpush list1 a b c。
- 为防止数据量过大造成客户端缓冲区溢出,对list、set、hash、zset等类型,每条指令最多写入64个元素
- bgrewriteaof
- auto-aof-rewrite-min-size size
- auto-aof-rewrite-percentage percentage
AOF持久化+重写:
对数据敏感,建议使用默认的AOF持久化方案
数据呈现阶段有效性,建议使用RDB持久化方案
综合对比
分享题目:Redis持久化基石RDB与AOF
文章位置:http://www.csdahua.cn/qtweb/news16/214566.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网