• redis持久化之RDB持久化



    因为redis是内存数据库,它将自己的数据库状态储存在内存里面,如果服务器进程退出,服务器的数据库状态就会消失不见。为了解决这个问题,redis提供了rdb持久化,这个功能就是将redis在内存的数据库状态存到磁盘里。

    一.RDB文件的创建与载入

    1.1 RDB文件的创建

    redis有两个命令用于创建RDB文件,分别是SAVE 和 BGSAVE.

    SAVE命令会阻塞当前服务器进程,知道RDB文件创建完成为止,期间redis服务器不接受任何其他命令;

    BGSAVE命令不会阻塞当前服务器进程,而是通过fork一个子进程,由这个子进程来创建RDB文件,服务器进程继续执行命令。

    1.2 RDB文件的载入

    RDB文件载入并没有命令去执行,它是在每次服务器启动的时候,只要检测到RDB文件的存在,就会去载入。

    需要注意的是,如果服务器开启了AOF持久化,优先用AOF文件来加载,如下图所示:

    前面提到过,当save命令执行时,redis服务器会被阻塞,所以当save命令正在执行时,客户端发送的所有命令请求都会被拒绝。只有服务器在执行完save命令,重新开始接受命令请求之后,客户端

    发送的命令才会被处理。

    而bgsave命令在执行时,redis服务器还会继续处理客户端的命令请求,但是在bgsave命令执行期间,服务器处理save,bgsave,bgrewriteaof三个命令的方式和平时会有点不同。

    1.bgsave命令执行期间,客户端发送的save命令会被拒绝

    2.bgsave命令执行期间,客户端发送的bgsave命令会被拒绝

    3.最后bgrewriteaof和bgsave不能同时执行,如果bgrewriteaof正在执行,客户端发送的bgsave命令会被服务器拒绝,如果basave正在执行,那么客户端发送的BGREWRITEAOF命令会被延迟到BGSAVE命令执行完毕之后执行。

    1.3 RDB文件载入时的服务器状态

    服务器在载入rdb文件期间,会一直处于阻塞状态,直到载入工作完成为止。

    1.4 自动间隔性保存

    redis允许用户通过设置服务器配置的save选项,让服务器每个一段时间自动执行一次BGSAVE命令。比如:
    save 900 1
    save 300 10
    save 60 10000

  • 相关阅读:
    private static final long serialVersionUID = 1L;
    HashMap和Hashtable的区别
    MySQL中tinytext、text、mediumtext和longtext详解
    char、varchar、text和nchar、nvarchar、ntext的区别
    java获取文件夹下文件名
    java删除文件
    js判断浏览器
    nodejs调试:node-inspector
    [转]各种开源协议介绍 BSD、Apache Licence、GPL V2 、GPL V3 、LGPL、MIT
    [IBM]掌握Ajax,Ajax中的高级请求和响应
  • 原文地址:https://www.cnblogs.com/juin1058/p/11593176.html
Copyright © 2020-2023  润新知