zoukankan      html  css  js  c++  java
  • RDB持久化

    redis是一个内存数据库,所有我们需要将他定时存在磁盘上,如果没有开启AOF,那么会生成RDB文件进行存储,其实就是个二进制文件

    RBD文件通过SAVE BGSAVE进行创建,

    SAVE会阻塞服务器进程,如果执行的话,那么client在这个期间发出的请求都不会响应

    BGSAVE其实是创建fork出一个子进程来执行,其实本质他们都是在实行rdbsave

    因为AOF的频率比RDB的频率高,所以启动服务器的时候,我们遵循着下面的原则

    如果执行BGSAVE的时候,收到了save会被拒绝,因为他们都是执行rdbsave,两个进程同时进行的话会产生竞争

    如果发出了BGREWRIEAOF的话,那么会等到BGSAVE执行完了在执行。相反的话会被拒绝,两个不可能同时进行,如果同时进行,会进行大量的写入磁盘操作

    间隔性保存

    struct redisserver{

      saveparam

      long long dirty

      time_t lastsave

    }

    上述三个其实表示了执行BGSAVE的条件

    saveparam就是指向的条件

    eg:

    save 300 1 300秒内执行一次

    dirty表示上一次bgsave结束后执行了多少次操作

    lastsave表示的上面bgsave的时间戳

    通过计算并且循环判断就是可以确定是否需要执行BGSAVE

     

    REDIS服务器会每隔100毫秒执行依稀,servercron函数,就是检查这个条件

    RDB文件结构:

    第一个大写的常亮,表示读的是RDBle,version是版本,EOF是数据库读完的结束标志,check_sum是一个效验码

    中间的是各个数据库中的数据

    上面表示的每一个数据库中的数据,主要是keyvaluepairs

     

    上面就是两种带过期键和不带的两种结构

    对于key其实就是一个字符串,对于value

    (1)如果大于20字节,那么就会以压缩的方式存储,如果不是,那么会按原样存储

    无压缩的结构和压缩的结构如下

    对于其他的比如列表对象,集合,有序集合,哈希,都会在最前有一个总的长度,对于值,如果是字符串的话,还会在前面有一个length的记录

  • 相关阅读:
    SVG Stroke属性
    C# 线程同步之排它锁/Monitor监视器类
    在Mac OS X Yosemite 10.10.3 中搭建第一个 ASP.NET 5 Web 项目
    jquery 之 Deferred 使用与实现
    jQuery 之 Callback 实现
    在解决方案中所使用 NuGet 管理软件包依赖
    下载和使用 Open XML PowerTools
    下载和编译 Open XML SDK
    Open XML SDK 在线编程黑客松
    VS2013 解决方案文件结构分析
  • 原文地址:https://www.cnblogs.com/13224ACMer/p/7075492.html
Copyright © 2011-2022 走看看