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

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

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

  • 目标:掌握Redis的AOF持久化机制
  • 路径
  • step1:问题
  • step2:AOF方案
  • step3:优缺点
  • step4:持久化方案
  • 实施
  • 问题
RDB存在一定概率的数据丢失,如何解决?
  • AOF方案
  • 思想
  • 按照一定的规则,将内存数据的操作日志追加写入一个文件中
  • 当Redis发生故障,重启,从文件中进行读取所有的操作日志,恢复内存中的数据
  • 重新对Redis进行执行,用于恢复内存中的数据
  • 过程

  • 实现:追加的规则
  • appendfsyncalways
  • 每更新一条数据就同步将这个更新操作追加到文件中
  • 优点:数据会相对安全,几乎不会出现数据丢失的情况
  • 缺点:频繁的进行数据的追加,增大磁盘的IO,导致性能较差
  • appendfsynceverysec
  • 每秒将一秒内Redis内存中数据的操作异步追加写入文件
  • 优点:在安全性和性能之间做了权衡,性能要比always高
  • 缺点:有数据丢失风险 ,但最多丢失1秒
  • appendfsyncno
  • 交给操作系统来做,不由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
shutdown
redis-start.sh
  • 查看数据
keys *
  • 从AOF文件恢复数据
  • 查看aof文件
ll /export/server/redis/datas
  • 小结
  • 实现AOF持久化

附录一:Jedis Maven依赖

<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>


目录
相关文章
|
存储 缓存 NoSQL
【📕分布式锁通关指南 12】源码剖析redisson如何利用Redis数据结构实现Semaphore和CountDownLatch
本文解析 Redisson 如何通过 Redis 实现分布式信号量(RSemaphore)与倒数闩(RCountDownLatch),利用 Lua 脚本与原子操作保障分布式环境下的同步控制,帮助开发者更好地理解其原理与应用。
996 6
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
937 2
|
存储 缓存 NoSQL
Redis核心数据结构与分布式锁实现详解
Redis 是高性能键值数据库,支持多种数据结构,如字符串、列表、集合、哈希、有序集合等,广泛用于缓存、消息队列和实时数据处理。本文详解其核心数据结构及分布式锁实现,帮助开发者提升系统性能与并发控制能力。
|
存储 关系型数据库 分布式数据库
喜报|阿里云PolarDB数据库(分布式版)荣获国内首台(套)产品奖项
阿里云PolarDB数据库管理软件(分布式版)荣获「2024年度国内首版次软件」称号,并跻身《2024年度浙江省首台(套)推广应用典型案例》。
|
Cloud Native 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
阿里云PolarDB云原生数据库在TPC-C基准测试中以20.55亿tpmC的成绩刷新世界纪录,展现卓越性能与性价比。其轻量版满足国产化需求,兼具高性能与低成本,适用于多种场景,推动数据库技术革新与发展。
|
NoSQL Java 调度
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
分布式锁是分布式系统中用于同步多节点访问共享资源的机制,防止并发操作带来的冲突。本文介绍了基于Spring Boot和Redis实现分布式锁的技术方案,涵盖锁的获取与释放、Redis配置、服务调度及多实例运行等内容,通过Docker Compose搭建环境,验证了锁的有效性与互斥特性。
1086 0
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
|
数据采集 存储 NoSQL
基于Scrapy-Redis的分布式景点数据爬取与热力图生成
基于Scrapy-Redis的分布式景点数据爬取与热力图生成
1236 67
|
存储 NoSQL MongoDB
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
564 8
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
|
缓存 NoSQL 关系型数据库
Redis缓存和分布式锁
Redis 是一种高性能的键值存储系统,广泛用于缓存、消息队列和内存数据库。其典型应用包括缓解关系型数据库压力,通过缓存热点数据提高查询效率,支持高并发访问。此外,Redis 还可用于实现分布式锁,解决分布式系统中的资源竞争问题。文章还探讨了缓存的更新策略、缓存穿透与雪崩的解决方案,以及 Redlock 算法等关键技术。
|
NoSQL Redis
Lua脚本协助Redis分布式锁实现命令的原子性
利用Lua脚本确保Redis操作的原子性是分布式锁安全性的关键所在,可以大幅减少由于网络分区、客户端故障等导致的锁无法正确释放的情况,从而在分布式系统中保证数据操作的安全性和一致性。在将这些概念应用于生产环境前,建议深入理解Redis事务与Lua脚本的工作原理以及分布式锁的可能问题和解决方案。
567 8

热门文章

最新文章