redis的异步定时同步方法

Redis的简介

Redis是一个高性能的开源非关系型数据库,也被称为远程字典服务(Remote Dictionary Server)。它由ANSI C语言编写,支持网络操作,可以基于内存进行数据存储,同时也提供了数据的持久化选项。Redis广泛应用于缓存、实时数据分析、消息队列等多种场景,以其高性能、丰富的数据结构和灵活性而受到开发者的青睐。

一、Redis的同步操作

  1. 基本概念
    • 同步操作指的是客户端发送一个命令到Redis服务器后,会一直等待Redis执行完毕并返回结果后,客户端才继续执行下一步操作。这种模式下,客户端的操作是阻塞的,直到收到Redis的响应。
  2. 常见同步操作
    • SET:设置键值对,客户端需要等待Redis确认设置完成。
    • GET:获取键的值,客户端需要等待Redis返回结果。
    • 事务操作:通过MULTIEXEC等命令执行的一系列命令,这些命令作为一个整体被Redis执行,客户端需要等待所有命令都执行完毕后才继续。
  3. 同步存储
    • 在Redis的持久化机制中,当设置同步策略为always时,每次写入操作都会将数据同步到磁盘,这种模式下,写入操作是同步的,即客户端需要等待数据写入磁盘后才继续。

二、Redis的异步操作

  1. 基本概念
    • 异步操作指的是客户端发送一个命令到Redis服务器后,立即返回,并不等待Redis的执行结果。这种模式下,客户端的操作是非阻塞的,可以继续执行其他操作。
  2. 常见异步操作
    • PUBLISH:发布消息到指定的频道,客户端发送命令后立即返回,不需要等待所有订阅者都接收到消息。
    • SUBSCRIBE:订阅一个或多个频道,客户端订阅后会立即进入等待消息的状态,但订阅操作本身是异步的。
    • 异步复制:在Redis的主从复制机制中,主节点将写操作记录到缓冲区,然后异步地将这些操作发送给从节点。从节点接收到命令后,会异步地执行这些命令,以保持与主节点的数据一致。
  3. 异步存储
    • 在Redis的持久化机制中,当设置同步策略为everysecno时,数据的同步是异步的。everysec表示每秒钟将数据同步到磁盘一次,而no则表示不进行数据同步,仅将数据保存在内存中。这两种模式下,写入操作都是非阻塞的,客户端不需要等待数据同步完成。

三、概括

Redis通过同步和异步操作机制提供了灵活的数据处理和通信方式。同步操作保证了操作的原子性和一致性,但可能会引入等待时间;异步操作提高了系统的并发能力和吞吐量,但需要注意数据一致性和完整性的问题。在实际应用中,可以根据具体需求选择合适的操作模式。同时,Redis的持久化机制也提供了同步和异步的存储选项,以满足不同场景下的数据安全和性能要求。

四、 案列介绍(Redis同步)

Redis的同步顾名思义就是操作数据增删改的时候要跟数据库的数据保持一致。

这是一个最基本的存取redis的步骤:

1. 因为redis通过key来获取value值,先定义一个key

2. 先判断Redis中是否已经存储数据

3. 如果Redis中没有数据,那么会先查询数据库,查询完之后将查询出来的数据存入Redis

4. 其中的key可以定义一个公共的静态常量

5. 同步的操作可以写在增删改的方法中,举下面添加的方法为例

6. 在添加完成数据后,调用查询的方法,此时查询出来的数据是最新的

7.将最新的数据直接存进Redis中,相同的数据可以直接覆盖,新的数据也更新到Redis中

五 、案列介绍(Redis异步定时同步)

1. 先创建一个线程池(每层的意思在下面的注释中)

2. 创建一个类用来专门执行同步的方法(举两个例子)

 2.1 第一个例子比较简单包含了两个方法:一个是定时任务,另一个是异步方法。

 如果只同步一个方法的话可以不需要用到线程池,不仅不会提高速度,反而还会增加负担

  • @Async:这是一个 Spring 注解,表示该方法会异步执行。通过指定的 taskExecutor,该方法将在一个新的线程中执行。
  • fetchSensitiveWords() 方法
    • 调用 patientMoneyLogService.findList() 方法获取 PatientMoneyLog 的数据。
    • 如果返回的 list 为 null,则抛出一个运行时异常,表示没有查询到数据。
    • 返回获取到的 PatientMoneyLog 列表。

2.2 这是个比较标准的一个格式

1. 在一个单独的类当中,远程调用需要同步的方法,每个同步的方法获取最新的数据,将所有方法获得到的最新数据 全部在sync()方法中进行异步同步,图中的是20分钟同步一次,如果数据变动快的话可以修改定时器

  • 28
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis同步机制主要有两种:主从复制和哨兵模式。 1. 主从复制 主从复制是Redis最基本、最常用的数据同步方式。它的原理是将主节点的数据复制到从节点,使得从节点的数据与主节点保持一致。主从复制的流程如下: 1)从节点向主节点发送SYNC命令,请求同步数据。 2)主节点接收到SYNC命令后,开始执行BGSAVE命令,将当前内存中的数据快照保存到磁盘上,并将快照文件发送给从节点。 3)从节点接收到快照文件后,执行全量复制操作,将快照文件中的数据加载到自己的内存中。 4)主节点将自己接收到的写命令同步给从节点,从节点执行相同的写操作,保证数据的一致性。 需要注意的是,主从复制是异步的,从节点与主节点的数据不是实时同步的。如果主节点发生故障,从节点可能会因为数据延迟而出现数据丢失的情况。 2. 哨兵模式 哨兵模式是一种高可用的Redis部署方案。它通过监控主节点的状态,自动将从节点切换为主节点,保证系统的可用性。哨兵模式的流程如下: 1)每个哨兵节点都会定时向主节点发送PING命令,检测主节点是否正常运行。 2)如果哨兵节点连续多次没有收到主节点的回复,就会认为主节点已经宕机,开始执行故障转移操作。 3)哨兵节点会选举一个从节点作为新的主节点,并将其他从节点切换到新的主节点上。 需要注意的是,哨兵模式需要至少3个哨兵节点才能正常工作,否则可能会出现脑裂的情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值