redis持久化以及原理-创新互联

RDB文件

在这里插入图片描述
在启动的时候 要制定配置文件
配置文件中 指定了rdb文件的名字,默认情况下
redis在哪里运行,那么他的rdb文件就会保存在哪里
而且每次退出redis的时候,都会执行一次 save 不是bgsave,因为都要退出redis,就代表要停止服务了,不玩了,不想接受新的请求了,所以使用阻塞的save比较合适。
而生成的文件名就是 这里的 dump.rdb

创新互联专业网站建设、网站设计,集网站策划、网站设计、网站制作于一体,网站seo、网站优化、网站营销、软文平台等专业人才根据搜索规律编程设计,让网站在运行后,在搜索中有好的表现,专业设计制作为您带来效益的网站!让网站建设为您创造效益。

在这里插入图片描述
当然在每次启动redis的时候,也会去读取这个rdb文件进行数据的恢复。
如果在关闭reids后修改了这里的文件名,那么再次启动的时候,自然是做不了数据的回复的

备份频率

在这里插入图片描述
这里的 5 1 就是 5秒内 只要有 1 次的key的修改 那么就执行一次 bgsave操作 (这里是 bgsave,是异步的)

rdb是否压缩

在这里插入图片描述
压缩是要占用 cpu资源的 所以视情况看是否开启压缩

原理

在这里插入图片描述

  1. 首先开启一个子进程 然后把页表复制一份给子进程 (页表是linux的虚拟内存和物理内存映射表 在linux中无法直接操作物理内存,页表就记录了虚拟内存和物理内存之间的映射关系)
  2. 子进程就开始对内存中的数据进行备份,并且会把这块内存设置为 只读状态,这是为了,即便在子进程备份的时候,主进程在写操作,就会造成脏数据的情况 如果设置成了只读状态,就可以避免这一情况的发生,但是如果这个时候真的来了一个写操作,那么主进程会把这个要修改的数据复制一份出来,对这个复制的数据进行修改,保证子进程的备份不会受到影响。
  3. 极端情况下,如果所有要备份的数据都被主进程重新写了一次,那么也就是说,redis的内存占用直接翻了一倍,原本16g,直接到了32g,那么怎么办?虽然这种情况非常的极端,几乎不可能发生,但是理论上存在,所以我们在使用redis的时候,一般不会把内存全部交给redis来使用,要留有一定的内存
存在的问题

如果,就如上文所说 300秒内有 100次 的 key 修改就执行 一次 rdb操作,那么会发生这种情况 如果在 300 秒内出现问题,突然的宕机,那么怎么办

AOF(append only file) 追加文件

只记录 写命令 可以看作是 命令日志文件
在这里插入图片描述
默认是不开启的 在配置文件中 开启即可 。当然也可以配置这个aof文件的文件名

频率

在这里插入图片描述
always就是 一次操作中 内存和磁盘都要 写 才能算完成一次操作。

everysec就是每秒钟
在这里插入图片描述
在这里插入图片描述
但是这样还是有问题
因为 aof 记录set等操作 如果 set num 123 然后又 set num 234
那么其实 第一次的set是没有意义的 ,但是依旧被记录了下来
占用空间,还浪费时间
所以有一个 bgrewriteaof 命令 进行重写aof文件 ,来解决上述问题
在这里插入图片描述
当然,我们可以配置 aof 重写的频率策略
在这里插入图片描述

总结

开启aof 只需要修改配置文件 从 no 改成 yes即可
其他的 每秒刷盘 以及 重写策略 都保持默认即可

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


当前标题:redis持久化以及原理-创新互联
转载源于:http://hbruida.cn/article/ideph.html