专栏首页晏霖Reactive的方式访问Redis

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

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/

本文分享自微信公众号 - 晏霖(yanlin199507),作者:晏霖

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java并发之-队列同步器AQS

    AQS是AbstractQueuedSynchronizer的简称,是用来构建锁或者其他同步组建的基础框架,它使用一个 int 类型的成员变量来表示同步状态,通...

    胖虎
  • 程序员再也不用担心金额转换的问题了

    想必同学们在开发当中一定涉及到金钱的属性,一旦涉及到钱就必须要保证不失精度,无论怎么转换一分钱也不能差,如果因为代码的疏忽,金额因为四舍五入或者类型转换时差 1...

    胖虎
  • 为什么HotSpot有‘对象’,因为他会垃圾分类和回收

    想和HotSpot一样吗?安全的管理众多的对象,掌握着对象的生与死。前文我们了解了对象在内存中的整个生命周期的是什么样的,程序运行就要无限的创建对象,我们Jav...

    胖虎
  • iOS系统的底层通知框架库

    观察者模式是一种用于解耦一系列需要相互协作的类之间进行通信的对象行为模式。它定义了对象之间的一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象...

    欧阳大哥2013
  • iOS系统的底层通知框架库

    观察者模式是一种用于解耦一系列需要相互协作的类之间进行通信的对象行为模式。它定义了对象之间的一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象...

    iOSSir
  • Laravel 项目中编写 Vue 组件

    新安装的 Laravel 应用在 resources/js/components 目录默认包含一个 ExampleComponent.vue Vue 组件。 ...

    hedeqiang
  • 深圳 GIAC 技术大会 Redis 演讲文字稿

    观众朋友们,我是来自掌阅的工程师钱文品,今天我带来的是分享主题是:Redis 在海量数据和高并发下的优化实践。Redis 对于从事互联网技术工程师来说并不陌生,...

    老钱
  • 钱文品 | 《Redis在海量数据和高并发下的优化实践》主题分享

    原文:http://www.enmotech.com/web/detail/1/750/1.html 

    数据和云01
  • 海量数据和高并发下的 Redis 业务优化实践

    观众朋友们,我是来自掌阅的工程师钱文品,今天我带来的是分享主题是:Redis 在海量数据和高并发下的优化实践。Redis 对于从事互联网技术工程师来说并不陌生,...

    猿天地
  • dvwa安装好后连接报错 Uncaught Error: Call to undefined function mysql_connect() in /Applications/XAMPP/xampp

    Fatal error: Uncaught Error: Call to undefined function mysql_connect() in /Appl...

    斑马

扫码关注云+社区

领取腾讯云代金券