zoukankan      html  css  js  c++  java
  • Redis设计与实现-8.RDB持久化

    RDB持久化功能,可以将Redis在内存中的数据库状态保存到磁盘里面,既可以手动执行,也可以根据配置定期执行,该功能可以将某一个时间点上的数据库状态保存带一个RDB文件上。RDB文件是一个经过压缩的二进制文件

    创建和载入

    两个Redis命令回生成RDB文件,一个是SAVE,一个是BGSAVE

    SAVE:会阻塞Redis服务器的进程,直到RDB文件创建完毕,在服务器进程阻塞期间,服务器不能处理任何请求。
    BGSAVE
    :会派生出一个子进程,然后由子进程完成RDB文件的创建,服务器进程继续处理命令请求。

    RDB文件的载入是在服务器启动的时候自动执行的,且载入的时候服务器会处于阻塞状态,直到载入完成。

    因为AOF文件更新频率会RDB文件高,所以会出现如下状况:

    • 如果开启了AOF持计划功能,那么服务器会优先使用AOF文件来还原数据库。
    • 只有在AOF持久化功能处于关闭状态下,服务器才会使用RDB文件来还原数据库。

    BGSAVE执行时候服务器状态

    执行BGSAVE的时候,服务器会拒绝SAVE命令,也会拒绝BGSAVE命令,防止了竞争条件的产生。

    BGSAVE命令和BGREWRITEAOF命令也不能同时执行(原因是同时进行大量磁盘写入操作,对性能不友好):

    • 如果BGSAVE正在执行,那么BGREWRITEAOF命令会被延迟到BGSAVE命令执行完毕之后。
    • 如果BGREWRITEAOF正在执行,那么客户端会直接拒绝BGSAVE命令。

    自动间隔保存

    Redis允许用户通过设置服务器配置的save选项,让服务器每隔一段时间自动执行一次BGSAVE命令。用户可以通过save选项设置多个保存条件,只要其中一个条件满足,服务器就会执行BGSAVE命令。

    提供如下save选项配置(Redis默认配置):

    save 900 1        服务器在900秒内,对数据库进行了至少1次修改
    save 300 10       服务器在300秒内,对数据库进行了至少10次修改
    save 60 10000     服务器在60秒内,对数据库进行了至少10000次修改

    设置保存条件

    当Redis服务器启动时,用户可以通过指定配置文件或者传入启动参数的方式设置save选项,如果没有主动设置save选项,采用默认配置。

    dirty计数器和lastsave属性

    dirty计数器记录距离上一次成功执行SAVE命令或者BGSAVE命令之后,服务器对数据库状态进行了多少次修改。

    lastsave属性是一个UNIX时间戳,记录了服务器上一次执行成功SAVE命令或者BGSAVE命令的时间。

    检查保存条件是否满足

    Redis的服务器周期性操作函数serverCron默认每隔100毫秒执行一次,其中一项工作就是检查save选项所设置的保存条件是否已经满足,如果满足,执行BGSAVE命令。

  • 相关阅读:
    Chrome---谷歌浏览器修改用户缓存文件夹 如何设置缓存路径
    Web移动端---iPhone X适配(底部栏黑横线)
    vue 项目使用 webpack 构建自动获取电脑ip地址
    vue+webpack项目打包后背景图片加载不出来问题解决
    免费苹果账号(apple id)申请ios证书p12真机调试
    将Vue移动端项目打包成手机app---HBuilder
    JS --- 本地保存localStorage、sessionStorage用法总结
    zTree & ckeditor &ValidateCode.jar 使用个人心得总结
    Java web实现综合查询+SQL语句拼接
    从小工到专家 2019.11.17
  • 原文地址:https://www.cnblogs.com/wangb0402/p/12795457.html
Copyright © 2011-2022 走看看