Redis的简介
Redis是一个高性能的开源非关系型数据库,也被称为远程字典服务(Remote Dictionary Server)。它由ANSI C语言编写,支持网络操作,可以基于内存进行数据存储,同时也提供了数据的持久化选项。Redis广泛应用于缓存、实时数据分析、消息队列等多种场景,以其高性能、丰富的数据结构和灵活性而受到开发者的青睐。
一、Redis的同步操作
- 基本概念:
- 同步操作指的是客户端发送一个命令到Redis服务器后,会一直等待Redis执行完毕并返回结果后,客户端才继续执行下一步操作。这种模式下,客户端的操作是阻塞的,直到收到Redis的响应。
- 常见同步操作:
- SET:设置键值对,客户端需要等待Redis确认设置完成。
- GET:获取键的值,客户端需要等待Redis返回结果。
- 事务操作:通过
MULTI
、EXEC
等命令执行的一系列命令,这些命令作为一个整体被Redis执行,客户端需要等待所有命令都执行完毕后才继续。
- 同步存储:
- 在Redis的持久化机制中,当设置同步策略为
always
时,每次写入操作都会将数据同步到磁盘,这种模式下,写入操作是同步的,即客户端需要等待数据写入磁盘后才继续。
- 在Redis的持久化机制中,当设置同步策略为
二、Redis的异步操作
- 基本概念:
- 异步操作指的是客户端发送一个命令到Redis服务器后,立即返回,并不等待Redis的执行结果。这种模式下,客户端的操作是非阻塞的,可以继续执行其他操作。
- 常见异步操作:
- PUBLISH:发布消息到指定的频道,客户端发送命令后立即返回,不需要等待所有订阅者都接收到消息。
- SUBSCRIBE:订阅一个或多个频道,客户端订阅后会立即进入等待消息的状态,但订阅操作本身是异步的。
- 异步复制:在Redis的主从复制机制中,主节点将写操作记录到缓冲区,然后异步地将这些操作发送给从节点。从节点接收到命令后,会异步地执行这些命令,以保持与主节点的数据一致。
- 异步存储:
- 在Redis的持久化机制中,当设置同步策略为
everysec
或no
时,数据的同步是异步的。everysec
表示每秒钟将数据同步到磁盘一次,而no
则表示不进行数据同步,仅将数据保存在内存中。这两种模式下,写入操作都是非阻塞的,客户端不需要等待数据同步完成。
- 在Redis的持久化机制中,当设置同步策略为
三、概括
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分钟同步一次,如果数据变动快的话可以修改定时器