spring boot 2.1学习笔记【十九】SpringBoot 2 集成响应式redis reactive

springboot系列学习笔记全部文章请移步值博主专栏**: spring boot 2.X/spring cloud Greenwich。
由于是一系列文章,所以后面的文章可能会使用到前面文章的项目。springboot系列代码全部上传至GitHub:https://github.com/liubenlong/springboot2_demo
本系列环境:Java11;springboot 2.1.1.RELEASE;springcloud Greenwich.RELEASE;MySQL 8.0.5;

文章目录

之前文章介绍了如何继承redis:spring boot 2.1学习笔记【九】SpringBoot 2 集成redis。本篇文章介绍集成响应式的redis

环境说明:
springboot 2.1.1
redis服务器使用的2.8

这里需要使用响应式的redis依赖spring-boot-starter-data-redis-reactive

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-data-redis-reactiveartifactId>
dependency>

<dependency>
    <groupId>org.apache.commonsgroupId>
    <artifactId>commons-pool2artifactId>
dependency>
<dependency>
    <groupId>com.alibabagroupId>
    <artifactId>fastjsonartifactId>
    <version>1.2.54version>
dependency>

配置application.yml

spring:
  redis:
    host: 127.0.0.1
    port: 6379
    lettuce:
      pool:
        max-active: 200 #连接池最大连接数(使用负值表示没有限制)
        max-idle: 20 # 连接池中的最大空闲连接
        min-idle: 5 #连接池中的最小空闲连接
        max-wait: 1000 # 连接池最大阻塞等待时间(使用负值表示没有限制)

编写测试controller。这里只是简单实用,每个方法作用请看注释:

/**
 * 这里的controller和RouterFunction可以共存
 */
@RestController
@Slf4j
public class MyController {

    /**
     * 注入响应式的ReactiveRedisTemplate
     */
    @Autowired
    private ReactiveRedisTemplate reactiveRedisTemplate;

    /**
     * 最简单的webflux程序
     *
     * @return
     */
    @GetMapping("/hello")
    public Mono<String> hello1() {
        return Mono.just("Welcome to reactive world ~");
    }


    /**
     * 删除数据
     * 注意这里需要执行消费。当然也可以使用flatMap
     * @return
     */
    @GetMapping("/deleteVal")
    public Flux deleteVal() {
        Mono a = reactiveRedisTemplate.delete("a");
        Mono b = reactiveRedisTemplate.delete("b");
        Mono c = reactiveRedisTemplate.delete("c");
        a.subscribe(System.out::println);//这里需要消费才行。否则无法真正操作。
        b.subscribe(System.out::println);
        c.subscribe(System.out::println);

        return Flux.just(a, c);
    }

    @GetMapping("testReactorRedis1")
    public void findCityById() {
        Mono mono1 = reactiveRedisTemplate.opsForValue().set("c", "vvvv");
        mono1.subscribe(System.out::println);

        Stu stu = Stu.builder().name("张三").age(20).build();
        Mono mono2 = reactiveRedisTemplate.opsForValue().set("a", JSONObject.toJSONString(stu));
        mono2.subscribe(System.out::println);

        //这里可以直接设置对象
        Mono mono3 = reactiveRedisTemplate.opsForValue().set("b", Stu.builder().age(11).name("ds").build());
        mono3.subscribe(System.out::println);
    }

    /**
     * 获取单个数据
     * @return
     */
    @GetMapping("/testReactorRedis2")
    public Mono testReactorRedis2() {
        Mono monoa = reactiveRedisTemplate.opsForValue().get("a");
        return monoa;
    }

    @GetMapping("/testReactorRedis3")
    public Mono<Stu> testReactorRedis3() {
        return reactiveRedisTemplate.opsForValue().get("b");
    }

    /**
     * 获取多个数据
     * 如果像testReactorRedis5一样获取的话,则会失败,不会真正发起请求
     * 这里使用flatMap异步发起,然后组装结果返回。
     * @return
     */
    @GetMapping("/testReactorRedis4")
    public Flux testReactorRedis4() {
        Flux flux = Flux.just("a", "b", "c")
                .flatMap(s -> reactiveRedisTemplate.opsForValue().get(s));
        flux.subscribe(System.out::println);
        return flux;
    }


    /**
     * 这样是不能够获取到数据的,因为并没有真正发送请求。输出如下:
     * {
     * monoa: {
     * scanAvailable: true
     * },
     * monoc: {
     * scanAvailable: true
     * }
     * }
     *
     * @return
     */
    @GetMapping("/testReactorRedis5")
    public Map testReactorRedis5() {
        Mono monoa = reactiveRedisTemplate.opsForValue().get("a");
        Mono monoc = reactiveRedisTemplate.opsForValue().get("c");
        return Map.of("monoa", monoa, "monoc", monoc);
    }
}

springboot系列学习笔记全部文章请移步值博主专栏**: spring boot 2.X/spring cloud Greenwich。
由于是一系列文章,所以后面的文章可能会使用到前面文章的项目。springboot系列代码全部上传至GitHub:https://github.com/liubenlong/springboot2_demo
本系列环境:Java11;springboot 2.1.1.RELEASE;springcloud Greenwich.RELEASE;MySQL 8.0.5;

你可能感兴趣的:(spring,boot,2.x,springboot,spring,boot,2.X/spring,cloud,Greenwich)