• Redis学习之:Redis的持久化


    1.什么是持久化?

    Redis的所有数据保存在内存中,对数据异步的更新保存到磁盘上称之为Redis的持久化。内存中的数据会因为关机或断电而丢失,使用持久化可以有效解决数据丢失的问题

    2.持久化方式

    Redis的持久化方式有以下两种:

    RDB(快照)

    将Redis中的数据通过一条命令可以生成一个快照,在硬盘上生成一个rdb文件

    触发机制

    • save(同步):如果数据量非常庞大,使用save会造成严重阻塞,此时Redis不能正常响应客户端,线上环境禁用
    • bgsave(异步):使用linux的fork命令,生成一个Redis的子进程,由子进程完成快照的生成。一般来说是不会阻塞主线程的,可以正常响应客户端,除非fork非常慢
    • 自动(某些条件达到的时候,自动触发):Redis默认自动生成RDB文件的规则是 900秒中有1条改变、300秒中有10条改变、60秒中有10000条改变
    save和bgsave
    命令 save bgsave
    IO类型 同步 异步
    是否阻塞 是(阻塞发生在fork期间)
    复杂度 O(n) O(n)
    优点 不会消耗额外内存 不阻塞客户端命令
    缺点 阻塞客户端命令 需要fork,消耗内存

    最佳配置

    配置名称 默认配置 推荐配置
    save save 900 1
    save 300 10
    save 60 10000
    X
    dbfilename dbfilename dump.rdb dbfilename dump-${port}.rdb
    dir dir ./ dir /bigdiskpath
    stop-writes-on-bgsave-error stop-writes-on-bgsave-error yes stop-writes-on-bgsave-error yes
    rdbcompression rdbcompression yes rdbcompression yes
    rdbchecksum rdbchecksum yes rdbchecksum yes

    RDB的问题

    • 耗时、耗性能(将所有数据dump到硬盘当中)
    • 不可控、丢失数据(在高并发写入场景下,即使刚刚进行了bgsave操作,可能1秒钟之内又收到了很多个写操作,此时刚好宕机,则会造成数据丢失)

    AOF(日志)

    将客户端的每一次写命令以日志形式追加到AOF文件中,几乎不会造成数据丢失
    写命令先将命令写入到缓冲区,根据某些策略将缓冲区数据写入到硬盘中

    AOF的三种策略

    命令 always(每条) everysec(每秒) no(由操作系统决定)
    优点 不丢失数据 每秒进行一次写操作, 不用管
    缺点 IO开销较大,一般的sata硬盘只有几百TPS 最多丢失1秒数据 不可控

    AOF的重写机制

    AOF持久化是通过保存被执行的写命令来记录数据库状态的,所以AOF文件的大小随着时间的流逝一定会越来越大。影响包括但不限于:对于Redis服务器,计算机的存储压力、AOF还原出数据库状态的时间增加
    为了解决AOF文件体积膨胀的问题,Redis提供了AOF重写功能:Redis服务器可以创建一个新的AOF文件来替代现有的AOF文件,新旧两个文件所保存的数据库状态是相同的,但是新的AOF文件不会包含任何浪费空间的冗余命令,通常体积会较旧AOF文件小很多

    • bgrewriteaof(命令)
    • AOF重写配置(配置)
      • auto-aof-rewrite-percentage AOF文件增长率,默认100
      • auto-aof-rewrite-min-size AOF文件重写需要的大小,默认64mb

    AOF重写流程

    AOF配置

    appendonly yes # 开启aof
    ppendfilename "appendonly-${port}.aof"  # aof文件名
    appendfsync everysec  #生成机制  每秒
    dir /bigdiskpath   # aof文件存储路径
    no-appendfsync-on-rewrite yes   # aof重写时,是否要做正常的aof操作,yes表示不做。因为重写时非常消耗性能的,也就是说这段时间是否允许丢失数据
    auto-aof-rewrite-percentage # AOF文件增长率,默认100
    auto-aof-rewrite-min-size # AOF文件重写需要的大小,默认64mb
    

    RDB与AOF对比

    命令 RDB AOF
    启动优先级
    体积
    恢复速度
    数据安全性 丢数据 根据策略决定
    轻重
  • 相关阅读:
    11.11 程序员的 1111 种死法
    护航11.11,如何筑牢安全防御系统?
    如何应对大促流量洪峰?揭秘京东技术人的备战手册
    TIOBE 11 月编程语言:Java 首次跌出前二;基于Pytorch的Kornia可微分计算机视觉库开源
    会展云技术解读 | 面对突发事故,APP 如何做好崩溃分析与性能监控?
    “开源软件供应链点亮计划
    走进京东 | 中国空间技术研究院青年创新联盟成员莅临参观京东总部
    深度解读展会场景智能推荐搭建之路 | 会展云技术解读
    第一届“多模态自然语言处理研讨会”精彩回顾(免费获取PPT)
    AI 科学家带你快速 Get 人工智能最热技术
  • 原文地址:https://www.cnblogs.com/xiaoqingtian/p/13635976.html
Copyright © 2020-2023  润新知