本文主要介绍响应式编程访问 Redis,以及 Spring Boot 与 Lettuce 的整合使用。

Lettuce 是可扩展性线程安全的 Redis 客户端,用于同步、异步和响应式使用。如果多个线程避免阻塞和事务性操作(例如 BLPOP 和 MULTI/EXEC),则它们可以共享一个连接。Lettuce 是基于 Netty 构建的。支持很多高级的Redis 特性。

根据 Spring Data Redis 2.0 的更新的消息显示,Spring Data Redis 不再支持 JRedis 的驱动,使用 Lettuce 来支持响应式连接,所以了解 Lettuce 的使用还是很有必要。

使用Reactive 驱动连接到Redis

无论使用什么库连接,必须要使用到 ReactiveRedisConnectionReactiveRedisConnectionFactory 来操作 Redis 或者查询存活的连接。

Lettuce 支持 单机,Redis Sentinel、Redis Cluster 集群模式

ReactiveRedisConnection 是与 Redis 通信的核心组件, ReactiveRedisConnectionFactory 用于创建 ReativeRedisConnection 实例。

Spring Boot 整合Lettuce 使用

增加依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>spring-reactive-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-reactive-demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis-reactive</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-test</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>
配置 ReactiveRedisTemplate
@Configuration
public class LettuceConfig { @Bean
ReactiveRedisTemplate<String, String> reactiveRedisTemplate(ReactiveRedisConnectionFactory reactiveRedisConnectionFactory) {
return new ReactiveRedisTemplate<>(reactiveRedisConnectionFactory, RedisSerializationContext.string());
}
}
ReactiveRedisTempalte 操作
@RestController
public class LettuceController { @Autowired
private ReactiveRedisTemplate reactiveRedisTemplate; @GetMapping("/put")
public Mono put(@RequestParam("key") String key, @RequestParam("val") String val) {
return reactiveRedisTemplate.opsForValue().set(key, val);
} @GetMapping("/get")
public Mono<String> get(@RequestParam("key") String key) {
return reactiveRedisTemplate.opsForValue().get(key);
} @GetMapping("/addList")
public Mono<Long> addList(@RequestParam("key") String key, @RequestParam("val") String val) {
return reactiveRedisTemplate.opsForList().rightPush(key, val);
} @GetMapping("/getList")
public Flux<String> getList(@RequestParam("key") String key) {
return reactiveRedisTemplate.opsForList().range(key, 0L, Long.MAX_VALUE);
} @GetMapping("/setHash")
public Mono<Boolean> setHash(@RequestParam("key") String key, @RequestParam("hashKey") String hashKey, @RequestParam("val") String val) {
return reactiveRedisTemplate.opsForHash().put(key, hashKey, val);
} @GetMapping("/getHash")
public Flux<Map.Entry<String, String>> getHash(@RequestParam("key") String key) {
return reactiveRedisTemplate.opsForHash().entries(key);
}
}

通过 ReactiveRedisTemplate 操作 Redis 的 string, list, hash类型的使用, 大致的了解 Lettuce 的使用,还有很多其他操作的类型,可以通过官方文章自行查阅。

参考:

https://docs.spring.io/spring-data/redis/docs/2.5.4/reference/html/#redis:reactive

响应式编程基础教程:Spring Boot 与 Lettuce 整合的更多相关文章

  1. SpringBoot使用WebFlux响应式编程操作数据库

    这一篇文章介绍SpringBoot使用WebFlux响应式编程操作MongoDb数据库. 前言 在之前一篇简单介绍了WebFlux响应式编程的操作,我们在来看一下下图,可以看到,在目前的Spring ...

  2. (转)Spring Boot 2 (十):Spring Boot 中的响应式编程和 WebFlux 入门

    http://www.ityouknow.com/springboot/2019/02/12/spring-boot-webflux.html Spring 5.0 中发布了重量级组件 Webflux ...

  3. Spring Boot 2 (十):Spring Boot 中的响应式编程和 WebFlux 入门

    Spring 5.0 中发布了重量级组件 Webflux,拉起了响应式编程的规模使用序幕. WebFlux 使用的场景是异步非阻塞的,使用 Webflux 作为系统解决方案,在大多数场景下可以提高系统 ...

  4. Spring Boot (十四): 响应式编程以及 Spring Boot Webflux 快速入门

    1. 什么是响应式编程 在计算机中,响应式编程或反应式编程(英语:Reactive programming)是一种面向数据流和变化传播的编程范式.这意味着可以在编程语言中很方便地表达静态或动态的数据流 ...

  5. Spring 5 响应式编程

    要点 Reactor 是一个运行在 Java8 之上的响应式流框架,它提供了一组响应式风格的 API 除了个别 API 上的区别,它的原理跟 RxJava 很相似 它是第四代响应式框架,支持操作融合, ...

  6. 浅谈Spring 5的响应式编程

    这篇使用Spring 5进行响应式编程的入门文章展示了你现在可以使用的一些新的non-blocking, asynchronous.感谢优锐课老师给予的指导! 近年来,由于响应式编程能够以声明性的方式 ...

  7. WebFlux基础之响应式编程

    上篇文章,我们简单的了解了WebFlux的一些基础与背景,并通过示例来写了一个demo.我们知道WebFlux是响应式的web框架,其特点之一就是可以通过函数式编程方式配置route.另外究竟什么是响 ...

  8. 什么是响应式编程——响应式Spring的道法术器

    响应式编程之道 1.1 什么是响应式编程? 在开始讨论响应式编程(Reactive Programming)之前,先来看一个我们经常使用的一款堪称“响应式典范”的强大的生产力工具——电子表格. 举个简 ...

  9. 函数响应式编程(FRP)—基础概念篇

    原文出处:http://ios.jobbole.com/86815/. 一函数响应式编程 说到函数响应式编程,就不得不提到函数式编程,他们俩有什么关系呢?今天我们就详细的解析一下他们的关系. 现在下面 ...

随机推荐

  1. 运行cmd时提示你可能没有适当的权限访问该项目

    Windows无法访问指定设备.路径或文件.你可能没有适当的权限访问该项目.   方法/步骤   在C:\Windows\System32目录下中找到cmd.exe文件   右键点击 "属性 ...

  2. Docker:docker国内镜像加速

    创建或修改 /etc/docker/daemon.json 文件,修改为如下形式 { "registry-mirrors": [ "https://registry.do ...

  3. phpCOW机制(写时复制)

    写时复制(Copy-on-Write,也缩写为COW),顾名思义,就是在写入时才真正复制一份内存进行修改. COW最早应用在*nix系统中对线程与内存使用的优化,后面广泛的被使用在各种编程语言中,如C ...

  4. Shell常用工具find,grep,sed,awk,xargs命令

    最近学习shell命令,对grep,sed,awk命令有点混乱,故小结一下,巩固一遍. 注意:find , grep , sed, awk可使用基本正则表达式字符,find,grep,awk也支持扩展 ...

  5. 我的Linux发行版选择

    Ubuntu CentOS Debian Fedora Slackware Mint Xubuntu Arch OpenSUSE Red Hat Slackel PureOS Mageia PCLin ...

  6. 7.Java数组

    一.数组概念(最简单的数据结构) 数组是相同类型数据的有序集合. 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成. 其中每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问 ...

  7. C语言:数组数据交换

    //交换数组中各个变量的值:第1和最后一个交换,第2与倒数第二个交换 #include <stdio.h> int main() { int a[]={1,2,3,4,5,6,7,8,9} ...

  8. CF1025B题解

    其他的几篇题解大多都是先求了 \(c_i \gets lcm(a_i,b_i)\) ,然后求全部 \(c_i\) 的最大公约数,但是对每一组数都求一下 \(lcm(a_i,b_i)\) 会增加时间复杂 ...

  9. 12Java进阶-IO与XML

    1.File File:java.io.File:代表一个实际的文件或目录. 常用构造方法File file = new File("path"); 其它构造方法: File(St ...

  10. PHP 多进程下载必应壁纸

    手里拿着锤子,看什么都像是钉子 在放假的这几天,断断续续的看了老李关于 PHP 多进程的文章. PHP多进程初探 --- 开篇 PHP多进程初探 --- 孤儿和僵尸 PHP多进程初探 --- 信号 P ...