Reactive的方式访问Redis

前言

本文主要大概介绍一下响应式/反应式编程方式访问 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
redisredis-4.0.11
JDK1.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/

 

 

 

 

 

 

 

 

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值