❝本文讲解知识点 持久化的简介 RDB AOF RDB与AOF的区别 持久化应用场景
❞
❝咔咔整理了一个路线图,打造一份面试宝典,准备按照这样的路线图进行编写文章,后期发现没有补充到的知识点在进行添加。也期待各位伙伴一起来帮助补充一下。评论区见哦!
❞
centos7.0 redis4.0 redis存放目录:/usr/local/redis redis.conf存放目录:/usr/local/redis/data
redis的所有数据都是保存在内存中,redis崩掉数据会丢失。redis持久化就是把数据保存在磁盘上。利用永久性存储介质将数据进程保存,在特定的时间将保存的数据进行恢复的工作机制称为持久化。
持久化过程保存的是什么呢?
第一种快照形式,存储数据结果,关注点在数据,也就是下文会讲到的RDB
第二种操作过程,存储操作过程,存储结构复杂,关注点在数据的操作过程,也就是下文会讲到的AOF
下图是redis.conf的配置信息,在执行完save后会生成一个dump.rdb的文件现在我们设置一个值,然后save一下,在/usr/local/redis/data下就会有一个dump6379.rdb的一个文件
其实这个数据恢复相对于其他关系型数据库恢复基本就不用操作什么。只需要重新在启动就好了
此图来源于网络视频。 save指令的执行会阻塞当前redis服务器,直到当前RDB过程完为止,有可能会造成长时间的阻塞。这个指令在工作过程中基本以被废弃不在使用。会以bgsave全部代替
当在redis执行了bgsave后会直接返回一个Background saving started
这个时候我们在看一下日志文件,bgsave命令是针对save阻塞问题做的优化
<span style="display: block; background: url(https://my-wechat.mdnice.com/point.png); height: 30px; width: 100%; background-size: 40px; background-repeat: no-repeat; background-color: #272822; margin-bottom: -7px; border-radius: 5px; background-position: 10px 10px;"></span><code class="hljs" style="overflow-x: auto; padding: 16px; color: #ddd; display: -webkit-box; font-family: Operator Mono, Consolas, Monaco, Menlo, monospace; font-size: 12px; -webkit-overflow-scrolling: touch; letter-spacing: 0px; padding-top: 15px; background: #272822; border-radius: 5px;"><span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">save</span> 900 1<br/><span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">save</span> 300 10<br/><span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">save</span> 60 10000<br/><span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">stop-writes-on-bgsave-error</span> <span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">yes</span><br/></code>
save 【时间】 【key改变数量】
也就是说在300秒有10个key值发生变化了,就会在后台执行bgsave
AOF持久化:以独立日志的方式记录每次写命令,重启时在重新执行AOF文件中命令达到数据恢复的目的。与RDB相比可以简单描述为记录数据产生的过程
AOF的主要作用是解决了数据持久化的实时性,目前已经是redis持久化的主流方式
执行一条redis命令
redis的AOF会把命令刷新缓冲区
然后根据一定的策略同步的到redis.conf配置的.aof文件中
appendonly yes|no
appendfsync always| everysec | no
然后使用重启redis服务,就可以在usr/local/redis/data目录下可以看到appendonly.aof文件了然后我们在redis客户端执行一条命令,在来查看一下。可以看到数据都会存入appendonly.aof这个文件中。
我们先看一个案例,我们重复设置了name这个key后,打开appendonly.aof文件查看,可以看到有三个操作,但是这三个操作我们都是修改的一个key啊!我们只保存最后一个key不行吗?带着这个疑问,我们在继续往下看
随着命令不断写入AOF,文件会越来越大,为了解决这个问题,redis引入了AOF重写机制压缩文件体积。AOF文件重写是将redis进程内的数据转化为写命令同步到新AOF文件的过程。简单说就是将对同一个数据的若干条命令执行结果转化为最终结果数据对应指令的执行记录。
如在上边我们执行了三次 set name 指令,但是我们最终就只需要最后一次执行的数据。也就是我们只需要最后一次执行记录即可。
hdel,srem
。 多次设置一个key值等lpush list a lpush lsit b lpush list c
可以转化为lpush list a b c
。但是为了防止数据量过大造成客户端缓冲区溢出,对list,set,hash,zset
类型每条指令最多写入64个元素指令:bgrewriteaof
接着我们3-5的问题,我们在命令行执行bgrewriteaof指令然后查看appendonly.aof文件
当执行完后会发现文件变小了,文件里也就只有一条指令了
配置:auto-aof-rewrite-percentage 100 | auto-aof-rewrite-min-size 64mb
触发对比参数:aof_current_size | aof_base_size
当aof_current_size > auto-aof-rewrite-min-size 64mb 会启动重写
此图来源于网络
对数据非常敏感,建议使用默认的AOF持久化方案
数据呈现阶段有效性,建议使用RDB持久化方案
综合对比
❝坚持学习、坚持写博、坚持分享是咔咔从业以来一直所秉持的信念。希望在偌大互联网中咔咔的文章能带给你一丝丝帮助。我们下期再见。
❞
推荐:《redis教程》
以上是一文带你了解Redis持久化完整版本的详细内容。更多信息请关注PHP中文网其他相关文章!