SpringDate的 ReactiveRedisTemplate使用教程

Spring cloud版本信息如下

在这里插入图片描述

引入Redis的依赖

我使用的是比较新的 reactive redis 中间踩了太多的坑了, 会在后面一一介绍的

dependencies {
    implementation project(":common")
    
    compile('org.springframework.boot:spring-boot-starter-data-redis-reactive')
    compile('org.springframework.boot:spring-boot-starter-web')

    implementation group: 'org.postgresql', name: 'postgresql', version: '42.2.20'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

    implementation 'org.apache.commons:commons-lang3:3.12.0'
    implementation 'com.vladmihalcea:hibernate-types-52:2.10.3'

    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
}

Redis 配置

  • 配置文件 :
## redis
spring.data.redis.repositories.enabled=true
spring.redis.host=redis-host
spring.redis.port=6379
spring.redis.password=123456
spring.redis.timeout=5000

基本配置, 没啥好说的

  • 配置类

此处比较坑,官方文档中有问题
ReactiveRedisTemplate 的生成需要传入RedisSerializationContext序列化配置。
如果按照官方文档中的配置。 关于自定义对象就无法转换成String而报错。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.ReactiveRedisConnectionFactory;
import org.springframework.data.redis.core.ReactiveRedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfiguration {

    @Bean
    public ReactiveRedisTemplate reactiveRedisTemplate(ReactiveRedisConnectionFactory connectionFactory) {
        RedisSerializationContext.SerializationPair<String> stringSerializationPair = RedisSerializationContext.SerializationPair.fromSerializer(StringRedisSerializer.UTF_8);
        RedisSerializationContext.SerializationPair<Object> objectSerializationPair = RedisSerializationContext.SerializationPair.fromSerializer(RedisSerializer.json());
        RedisSerializationContext.RedisSerializationContextBuilder builder =
                RedisSerializationContext.newSerializationContext();
        builder.key(stringSerializationPair);

        builder.value(objectSerializationPair);

        builder.hashKey(stringSerializationPair);
        builder.hashValue(objectSerializationPair);

        builder.string(objectSerializationPair);

        RedisSerializationContext build = builder.build();

        ReactiveRedisTemplate reactiveRedisTemplate = new ReactiveRedisTemplate(connectionFactory, build);
        return reactiveRedisTemplate;
    }
}

使用RedisTemplate

熟练使用它需要前置知识Spring Reactor 编程


    @Autowired
    private ReactiveRedisTemplate reactiveRedisTemplate;


    public void useRedisExample(){
        ReactiveHashOperations<String, String, Object> reactiveHashOperations = reactiveRedisTemplate.opsForHash();
        Mono<Long> runningPage = reactiveHashOperations.size("myHash");
        Long count = runningPage.subscribeOn(Schedulers.elastic()).block();


        Mono<Boolean> putResult = reactiveHashOperations.putIfAbsent("myHash", "myKey", new MyObject());
        Boolean putBool = putResult.block();

        ReactiveValueOperations<String, String> reactiveValueOperations = reactiveRedisTemplate.opsForValue();

        Mono<Boolean> setMono = reactiveValueOperations.set("myKey", "MyValue", Duration.ofHours(1));
        Boolean block = setMono.block();

    }

Redis关于LocalDateTime序列化的问题

网络上搜索都是针对非Reactor的Redis的解决办法

  1. 引入依赖:
  compile('com.fasterxml.jackson.core:jackson-annotations')
    compile('com.fasterxml.jackson.core:jackson-databind')
    compile('com.fasterxml.jackson.datatype:jackson-datatype-jsr310')
  1. 在字段上增加注解
  @Column
    @CreationTimestamp
    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
    @JsonSerialize(using = LocalDateTimeSerializer.class)
    private LocalDateTime createTime;

上面的方法我试过无效。 具体的解决办法 我还在探索中。

ReactiveRedisTemplate和RedisTemplate都是Spring Data Redis中的两个关键类,用于与Redis进行交互。它们都提供了对Redis的常见操作(如读取、写入、删除等)的支持,但在使用上有一些区别。 ReactiveRedisTemplate是响应式的Redis操作模板,基于Reactor库,它使用反应式编程模型。它的使用需要掌握Spring Reactor编程,适用于需要处理高并发请求的场景。通过ReactiveRedisTemplate,可以使用ReactiveHashOperations和ReactiveValueOperations等类进行对Hash和Value类型数据的操作。 RedisTemplate是传统的Redis操作模板,适用于非响应式环境。它的使用不需要掌握Spring Reactor编程,可以直接使用普通的HashOperations和ValueOperations等类进行对Hash和Value类型数据的操作。 在测试代码中,ReactiveRedisTemplate使用示例展示了如何使用ReactiveStringRedisTemplate来进行操作,包括设置和获取值等。而RedisTemplate的使用示例展示了如何使用StringRedisTemplate来进行操作,同样也包括设置和获取值等。 总结来说,ReactiveRedisTemplate适用于需要处理高并发请求的场景,并且使用反应式编程模型,而RedisTemplate适用于非响应式环境。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [StringRedisTemplate 和 ReactiveStringRedisTemplate 对比](https://blog.youkuaiyun.com/u014291399/article/details/108410315)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [SpringDateReactiveRedisTemplate使用教程](https://blog.youkuaiyun.com/leisurelen/article/details/118198219)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值