前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于内存的分布式NoSQL数据库Redis(六)AOF设计

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

作者头像
Maynor
发布2023-10-22 16:06:17
1520
发布2023-10-22 16:06:17
举报

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

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

路径

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

实施

问题

代码语言:javascript
复制
RDB存在一定概率的数据丢失,如何解决?

AOF方案

  • 思想
    • 按照一定的规则,将内存数据的操作日志追加写入一个文件中
    • 当Redis发生故障,重启,从文件中进行读取所有的操作日志,恢复内存中的数据
    • 重新对Redis进行执行,用于恢复内存中的数据
  • 过程
image-20210521164135479
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持久化

实施

开启并配置

代码语言:javascript
复制
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

重启Redis

代码语言:javascript
复制
shutdown
redis-start.sh

查看数据

代码语言:javascript
复制
  keys *
image-20210522103318073
image-20210522103318073
  • 从AOF文件恢复数据

查看aof文件

代码语言:javascript
复制
  ll /export/server/redis/datas
image-20210522103432092
image-20210522103432092

小结

  • 实现AOF持久化

附录一:Jedis Maven依赖

代码语言:javascript
复制
    <properties>
        <jedis.version>3.2.0</jedis.version>
    </properties>

    <dependencies>
        <!-- Jedis 依赖 -->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>${jedis.version}</version>
        </dependency>
        <!-- JUnit 4 依赖 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-10-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 知识点21:Redis持久化:AOF设计
  • 知识点22:Redis持久化:AOF实现
  • 附录一:Jedis Maven依赖
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档