• 基于内存的分布式NoSQL数据库Redis(六)AOF设计


    知识点21:Redis持久化:AOF设计

    • 目标:掌握Redis的AOF持久化机制

    • 路径

      • step1:问题
      • step2:AOF方案
      • step3:优缺点
      • step4:持久化方案
    • 实施

      • 问题

        RDB存在一定概率的数据丢失,如何解决?
        
        • 1
      • AOF方案

        • 思想

          • 按照一定的规则,将内存数据的操作日志追加写入一个文件中
          • 当Redis发生故障,重启,从文件中进行读取所有的操作日志,恢复内存中的数据
          • 重新对Redis进行执行,用于恢复内存中的数据
        • 过程

          image-20210521164135479

        • 实现:追加的规则

          • appendfsync always
            • 每更新一条数据就同步将这个更新操作追加到文件中
            • 优点:数据会相对安全,几乎不会出现数据丢失的情况
            • 缺点:频繁的进行数据的追加,增大磁盘的IO,导致性能较差
          • appendfsync everysec
            • 每秒将一秒内Redis内存中数据的操作异步追加写入文件
            • 优点:在安全性和性能之间做了权衡,性能要比always高
            • 缺点:有数据丢失风险 ,但最多丢失1秒
          • appendfsync no
            • 交给操作系统来做,不由Redis控制
            • 肯定不用的
      • 优缺点

        • 优点:安全性和性能做了折中方案,提供了灵活的机制,如果性能要求不高,安全性可以达到最高

        • 缺点

          • 这个文件是普通文本文件,相比于二进制文件来说,每次追加和加载比较慢

          • 数据的变化以追加的方式写入AOF文件

            • 问题:文件会不断变大,文件中会包含不必要的操作【过期的数据】
            • 解决:模拟类似于RDB做全量的方式,定期生成一次全量的AOF文件
      • 应用数据持久化安全方案,理论上绝对性保证数据的安全

      • 持久化方案:两种方案怎么选?

        • 两种方案都可以用:默认不配置AOF,使用的RDB
        • 问题**:两种都用,**重启Redis加载的是谁的数据?
          • 加载AOF
    • 小结

      • 什么是AOF机制?

        • 按照一定的规则将内存中的变化追加记录在一个日志文件中
        • 规则
        • always:内存变化一条,就追加磁盘一条,安全性高,性能差
          • everysesc:每一秒将这一秒内存的变化追加到磁盘中,安全和性能做了折中
          • no:不用
        • 优点
        • 安全和性能的选择更加灵活,安全性更高
        • 缺点
        • 追加到普通日志文件:相比于二进制来追加和恢复都要慢一些
          • 日志文件越来越大,里面会包含很多无用数据操作:根据规则来构建全量的AOF
        • 应用:Redis作为数据库或者缓存

    知识点22:Redis持久化:AOF实现

    • 目标:实现AOF持久化

    • 实施

      • 开启并配置

        vim redis.conf
        #594行:开启aof
        appendonly yes
        #624行:默认每s刷写一次
        appendfsync everysec
        #665,666
        #增幅100%就重新覆盖一次
        auto-aof-rewrite-percentage 100
        #文件至少要大于64MB,一般建议更改为GB大小
        auto-aof-rewrite-min-size 64mb
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
      • 重启Redis

        shutdown
        redis-start.sh
        
        • 1
        • 2
    • 查看数据

        keys *
      
      • 1

      image-20210522103318073

      • 从AOF文件恢复数据
    • 查看aof文件

        ll /export/server/redis/datas
      
      • 1

      image-20210522103432092

    • 小结

      • 实现AOF持久化

    附录一:Jedis Maven依赖

        <properties>
            <jedis.version>3.2.0jedis.version>
        properties>
    
        <dependencies>
            
            <dependency>
                <groupId>redis.clientsgroupId>
                <artifactId>jedisartifactId>
                <version>${jedis.version}version>
            dependency>
            
            <dependency>
                <groupId>junitgroupId>
                <artifactId>junitartifactId>
                <version>4.13version>
            dependency>
        dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.pluginsgroupId>
                    <artifactId>maven-compiler-pluginartifactId>
                    <version>3.0version>
                    <configuration>
                        <source>1.8source>
                        <target>1.8target>
                        <encoding>UTF-8encoding>
                    configuration>
                plugin>
            plugins>
        build>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
  • 相关阅读:
    2022 9.6 模拟
    【math】利用Cardano方法对一元三次方程求解及python实现
    Thinkphp设计的语言学习平台
    爬虫的http和https基础
    【Java面试题】《尚硅谷经典Java面试题第一季(java面试精讲)》学习笔记
    Python数据结构——Tuple
    Java Class反射
    k8s KubeSphere流水线部署SpringBoot后端项目 详细教程
    Linux磁盘分配 把home的空间扩容给root
    Twitter CEO辞任,硅谷印度裔高管再添一人
  • 原文地址:https://blog.csdn.net/xianyu120/article/details/133787935