• Redis-rdb持久化


    Redis实现快照的过程

    1. redis调用fork,现在有了子进程和父进程
    2. 父进程继续处理client请求,子进程负责将内存内容写入到临时文. 由于os的写时复制机制(copy on write)父子进程会共享相同的物理页面, 当父进程处理写请求时os会为父进程要修改的页面创建副本, 而不是写共享的页面, 所以子进程的地址空间内的数据是fork时刻整个数据库的一个快照(是不是类似于python中使用os模块创建子进程???)
    3. 当子进程将快照写入临时文件完毕后,用临时文件替换原来的快照文件, 然后子进程退出

    注:

    • client 也可以使用save或者bgsave命令通知redis做一次快照持久化。save操作是在主线程中保存快照的,由于redis是用一个主线程来处理所有 client的请求,这种方式会阻塞所有client请求, 所以不推荐使用.
    • 另一点需要注意的是,每次快照持久化都是将内存数据完整写入到磁盘一次,并不是增量的只同步脏数据。如果数据量大的话,而且写操作比较多,必然会引起大量的磁盘io操作,可能会严重影响性能。
    • 另外由于快照方式是在一定间隔时间做一次的,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改。如果应用要求不能丢失任何修改的话,可以采用aof持久化方式

    数据备份

    使用SAVE命令保存数据或使用BGSAVE在后台保存

    127.0.0.1:6379> SAVE
    OK
    127.0.0.1:6379>
    

    该命令将在redis目录中创建dump.rdb文件

    数据恢复

    将备份文件(dump.rdb)移动到redis安装目录并启动服务
    获取redis目录使用如下命令

    127.0.0.1:6379> CONFIG GET dir
    1) "dir"
    2) "/home/ql"
    127.0.0.1:6379> 
    

    持久化: 把数据存储于断电后不会丢失的设备中, 通常是硬盘

    常见持久化方式:
    主从: 通过从服务器保存和持久化, 如mongoDB的replication sets配置
    日志: 操作生成相关日志, 并通过日志来恢复数据

    rdb工作原理:

    每隔N分钟N次写(新增或改变)操作后, 从内存dump数据形成rdb文件, 压缩, 放在备份目录
    : 红色部分可以通过参数来配置

    rdb快照相关参数

    save 900 1    #刷新快照到硬盘中, 必须满足两者要求才会触发, 及900秒内至少1个关键字发生变化
    save 300 10  #必须是300秒内至少10个关键字发生变化
    save 60 10000  #必须是60秒内至少10000个关键字发生变化
    #以上三个选项都屏蔽, 则rdb被禁用
    
    stop-writes-on-bgsave-error yes    #后台存储错误停止写
    rdbcompression yes    #使用LZF压缩rdb文件
    rdbchecksum yes     #存储和加载rdb文件时校验
    dbfilename dump.rdb    #设置rdb文件名
    dir ./    #设置工作目录, rdb文件会写入该目录
    

    rdb缺陷

    在两个保存点之间突然断电, 则会丢失两个保存点之间的数据
    出于对持久化的更精细要求, redis增添了 aof方式 (append only file)

  • 相关阅读:
    uart协议--Verilog及仿真
    DC综合的流程
    modelsim将vcd文件转换成wlf文件并查看波形
    将系统盘还原成原来的普通u盘
    Ubuntu的操作命令
    gvim快捷键
    dc_shell环境下TCL语言的使用
    AHB总线学习
    Ubuntu文件共享
    Linux基础学习 | 目录及文件
  • 原文地址:https://www.cnblogs.com/qlshine/p/5958592.html
Copyright © 2020-2023  润新知