Spring Data Redis 教程

什么是响应式编程?

响应式编程,简称RP(Reactive Programming)。响应式编程是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。

例如,对于 a=b+c 这个表达式的处理,在命令式编程中,会先计算 b+c 的结果,再把此结果赋值给 变量a,因此 b,c 两值的变化不会对 变量 a 产生影响。但在响应式编程中,变量 a 的值会随时跟随 b,c 的变化而变化。其实,Excel 表格程序就是响应式编程的一个例子,当 b 和 c 单元格的值变化时,a 的值将随着变化。如下图:

Reactor库

Reactor 项目的主要 <artifact> 是 reactor-core,这是一个基于 Java 8 的实现了响应式流规范的响应式库。Reactor 是一个基于 JVM 之上的异步应用基础库。为 Java 、Groovy 和其他 JVM 语言提供了构建基于事件和数据驱动应用的抽象库。Reactor 性能相当高,在最新的硬件平台上,使用无堵塞分发器每秒钟可处理 1500 万事件。

Reactor 提供了实现 Publisher 的响应式类 Flux 和 Mono,以及丰富的操作符。一个 Flux 代表 0...N 个元素的响应式流。一个 Mono 代表 0 或 1 个元素的响应式流。

Flux 和 Mono 之间可以转换,比如:Flux 的 count 操作(计算流中元素个数)返回 Mono,Mono 的 concatWith 操作(连接另一个响应式流)返回 Flux。

Publisher

由于响应流的特点,我们不能再返回一个简单的POJO对象来表示结果了。必须返回一个类似Java中的Future的概念,在有结果可用时通知消费者进行消费响应。

Reactive Stream规范中这种被定义为Publisher<T> ,Publisher<T>是一个可以提供0-N个序列元素的提供者,并根据其订阅者Subscriber<? super T>的需求推送元素。一个Publisher<T>可以支持多个订阅者,并可以根据订阅者的逻辑进行推送序列元素。

Flux

Flux<T> 是一个能够发出 0 到 N 个元素组成的异步标准 Publisher<T>,它会被一个完成(completion)或错误(error)信号终止。因此,一个 Flux 的可能结果是 value、completion 或 value,这三个分别会传递给订阅者中的 onNext、onComplete、onError 方法。

注意:所有的信号事件,包括代表终止的信号事件都是可选的。如果没有 onNext 事件,但是有 onComplete 事件,那么发出的就是空的有限流;如果去掉 onComplete 就得到一个 无限的空数据流。无限的数据流可以不是空的,比如 Flux.interval(Duration) 生成的是一个 Flux<Long>,这是一个无限周期性发出规律整数的时钟数据流。

Mono

Mono<T> 是一种特殊的 Publisher<T>,它最多只能发出一个元素,然后(可选的)终止于 onComplete 或 onError 信号。

Mono 中的操作符是 Flux 中操作符的子集,即 Flux 中只有部分操作符适用于 Mono,有些操作符是将 Mono 和另一个 Publisher 连接转换为 Flux。例如,Mono#concatWith(Publisher) 转换为 Flux,Mono#then(Mono) 返回另一个 Mono。

注意:可以使用 Mono<Void> 来创建一个只有完成概念的空值异步处理过程(类似于 Runnable)。

在 Spring Data Redis 中,响应式编程也主要通过 Flux 和 Mono 来完成,后续将介绍怎样利用 Flux 和 Mono 来实现 Sping Data Redis 响应式编程。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号