前言
本文主要大概介绍一下响应式/反应式编程方式访问 redis,不能解决很多生产问题,只是帮助大家对响应式编程有一个认识。
本文是以Reactive 对方式访问 Redis ,当然也可以访问mongodb,以及部分关系型数据库,例如 Postgres,H2,Microsoft SQL Sever,目前只支持这些,持续更新请关注(https://spring.io/projects/spring-data-r2dbc),这个子工程是spring为了更好支持关系型数据库开发的。
响应式编程目前支持最多的是 web 层面,也就是我们springboot 依赖的 spring-boot-starter-webflux
正文
通俗解释Reactive: a=b+c ,我们给a 赋值后,再去改变b或者c不会影响a,我们在单元格写一个公式时,这样的值会随着其他值的改变而改变,这就是响应式的一个体现。
Java操作Redis的库有两个,Jedis和Lettuce,目前SpringBoot 2.x中已经将Jedis换成了Lettuce。
Lettuce能够支持 Reactive 方式
Spring Data Redis 中主要的支持
- ReactiveRedisConnection
- ReactiveRedisConnectionFactory
- ReactiveRedisTemplate
使用所有框架和中间件的版本
框架 | 版本 |
Spring Boot | 2.1.3.RELEASE |
redis | redis-4.0.11 |
JDK | 1.8.x |
首先,创建一个maven工程,其pom文件如下
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis-reactive</artifactId>
</dependency>
</dependencies>
这样我们就可以使用springboot 2.0+ 自带的 lettuce。
创建一个启动类 名字叫 RedisDemoApplication
@SpringBootApplication
public class RedisDemoApplication implements ApplicationRunner {
@Autowired
private ReactiveStringRedisTemplate redisTemplate;
public static void main(String[] args) {
SpringApplication.run(RedisDemoApplication.class, args);
}
@Bean
ReactiveStringRedisTemplate reactiveRedisTemplate(ReactiveRedisConnectionFactory factory) {
return new ReactiveStringRedisTemplate(factory);
}
@Override
public void run(ApplicationArguments args) throws Exception {
ReactiveHashOperations<String, String, String> hashOps = redisTemplate.opsForHash();
Mono mono1 = hashOps.put("apple", "x", "6000");
mono1.subscribe(System.out::println);
Mono mono2 = hashOps.put("apple", "xr", "5000");
mono2.subscribe(System.out::println);
Mono mono3 = hashOps.put("apple", "xs max", "8000");
mono3.subscribe(System.out::println);
}
}
如果说我们想连接 reids的话,那么现在已经做完了。
测试一下
启动上面的程序,回到redis客户端,输出如下命令
127.0.0.1:6379> hgetall apple
1) "x"
2) "6000"
3) "xr"
4) "5000"
5) "xs max"
6) "8000"
127.0.0.1:6379>
我们看到网上其他博主的文章有些累赘,我觉得很多可以用默认就用默认的,可以不写的那就不写,我连个配置文件都没用不是一样连接到redis嘛。
另外响应式编程目前我还没有听说哪家企业普及,但是这应该是未来的趋势,我们可能对返回 Flux 和Mono 有些不习惯,放心,一定有你习惯的一天。
关于 响应式编程的其他操作网上有很多,可以访问如下
https://blog.csdn.net/liubenlong007/article/details/86541913
https://www.jianshu.com/p/5172c48cb877
http://www.pianshen.com/article/868527566/