redis持久化之RDB介绍

  • redis持久化介绍

    • redis是一个内存数据库,如果没有配置持久化,redis重启后数据就全丢失
    • 因此开启redis的持久化功能,将数据保存到磁盘上,当redis重启后,可以从磁盘中恢复数据
  • 两种持久化方式

    • RDB(Redis DataBase)
    • AOF(append only file)
  • RDB持久化介绍

    • 在指定的时间间隔内将内存中的数据集快照写入磁盘
    • 默认的文件名为dump.rdb
  • 产生快照的情况

    • save
      • 会阻塞当前redis服务器,执行save命令期间,redis不能处理其他命令,直到RDB过程完成为止
    • bgsave
      • fork创建子进程,RDB持久化过程由子进程负责,会在后台异步进行快照操作,快照同时还可以响应客户端请求
    • 自动化
      • 配置文件来完成,配置触发redis的RDB持久化条件
      • 比如“save m n”:表示m秒内数据集存在n次修改时,自动触发bgsave
    • 主从架构
      • 从服务器同步数据的时候,会发送sync执行同步操作,master主服务器就会执行bgsave
  • 优点

    • RDB文件紧凑,全量备份,适合用于进行备份和灾难恢复
    • 在恢复大数据集时的速度比AOF的恢复速度要快
    • 生成的是一个紧凑压缩的二进制文件
  • 缺点

    • 每次快照是一次全量备份,fork子进程进行后台操作,子进程存在开销
    • 在快照持久化期间修改的数据不会被保存,可能丢失数据
  • 核心配置

    # 任何ip都可以访问
    bind 0.0.0.0
    # 守护进程
    daemonize yes
    # 密码
    requirepass 123456
    # 日志文件
    logfile "/usr/local/redis/log/redis.log"
    # 持久化文件名称
    dbfilename redis.rdb
    # 持久化文件存储路径
    dir /usr/local/redis/data
    # 持久化策略,10秒内有1个key改动,执行快照
    save 10 1
    # 导出rdb数据库文件压缩字符串和对象,默认是yes,会浪费CPU但是节省空间
    rdbcompression yes
    # 导入时是否检查
    rdbchecksum yes
    
  • linux内存分配策略

    0:表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并发错误返回给应用进程
    1:表示内核允许分配所有的物理内存,而不管当前的内存状态如何
    2:表示内核允许分配超过物理内存和交换空间总和的内存
    
    修改方法:
    echo 1 > /proc/sys/vm/overcommit_memory
    
    持久化配置
    vim /etc/sysctl.conf
    改为
    vm.overcommit_memory=1
    修改sysctl.conf后,需要执行sysctl -p 以生效
    
posted @ 2021-07-23 15:54  Gen2021  阅读(233)  评论(0编辑  收藏  举报