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

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: 基于内存的分布式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>


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
18天前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
8天前
|
存储 缓存 NoSQL
Redis中的rdb和aof
本文深入探讨了Redis的持久化机制,包括RDB和AOF两种方式。详细解释了RDB的工作原理、优势和劣势,以及AOF的实现原理、配置选项、文件重写机制和三种数据同步方式,还介绍了AOF文件修复工具redis-check-aof的使用,并通过实例展示了如何开启和配置AOF持久化方式。
Redis中的rdb和aof
|
8天前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
55 5
|
13天前
|
存储 NoSQL 关系型数据库
NoSQL 数据库的优缺点?
NoSQL 数据库的优缺点?
30 4
|
13天前
|
存储 SQL NoSQL
NoSQL数据库
NoSQL数据库
29 4
|
5天前
|
NoSQL 安全 关系型数据库
20)用 Redis 实现分布式锁
20)用 Redis 实现分布式锁
15 0
|
6天前
|
存储 缓存 NoSQL
深入探究Redis的AOF持久化:保障数据安全与恢复性能的关键机制
深入探究Redis的AOF持久化:保障数据安全与恢复性能的关键机制
15 0
|
10天前
|
JSON NoSQL 数据库
和SQLite数据库对应的NoSQL数据库:TinyDB的详细使用(python3经典编程案例)
该文章详细介绍了TinyDB这一轻量级NoSQL数据库的使用方法,包括如何在Python3环境中安装、创建数据库、插入数据、查询、更新以及删除记录等操作,并提供了多个编程案例。
24 0
|
2月前
|
NoSQL Redis
基于Redis的高可用分布式锁——RedLock
这篇文章介绍了基于Redis的高可用分布式锁RedLock的概念、工作流程、获取和释放锁的方法,以及RedLock相比单机锁在高可用性上的优势,同时指出了其在某些特殊场景下的不足,并提到了ZooKeeper作为另一种实现分布式锁的方案。
73 2
基于Redis的高可用分布式锁——RedLock
|
2月前
|
缓存 NoSQL Java
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
这篇文章是关于如何在SpringBoot应用中整合Redis并处理分布式场景下的缓存问题,包括缓存穿透、缓存雪崩和缓存击穿。文章详细讨论了在分布式情况下如何添加分布式锁来解决缓存击穿问题,提供了加锁和解锁的实现过程,并展示了使用JMeter进行压力测试来验证锁机制有效性的方法。
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】

热门文章

最新文章

下一篇
无影云桌面