Spring WebFlux集成Redis响应式编程

响应式 Redis 是指使用响应式编程模型来操作 Redis 数据库的方式。传统的 Redis 客户端通常采用同步或阻塞式调用,这意味着当客户端发送请求给 Redis 服务器时,它会等待直到收到响应。在高并发的情况下,这可能导致线程阻塞,降低系统的性能和响应性。

响应式 Redis 的出现是为了解决这个问题。它采用了响应式编程的思想,允许开发者以异步、非阻塞的方式与 Redis 进行交互。这意味着当发出一个请求后,客户端不会阻塞等待响应,而是可以继续执行其他操作。一旦收到 Redis 的响应,它可以通过回调、流或其他异步机制进行处理。

通常,响应式 Redis 会与响应式编程框架(如 Reactor、RxJava)结合使用,以提供一套异步的 API,用于执行 Redis 命令并处理结果。这种方式可以更有效地利用系统资源,提高应用程序的性能、并发能力和响应性。

总的来说,响应式 Redis 是一种使用响应式编程模型来操作 Redis 数据库的方式,旨在提高系统的性能和响应性,特别是在高并发、高负载的场景下。

1、引用Maven依赖

<!-- redis and reactive redis -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis-reactive</artifactId>
    <version>2.7.9</version>
</dependency>

2、YAML配置

spring:
  redis:
    cluster:
      nodes:
        - 127.0.0.1:6379
    username: 123
    password: 321
    lettuce:
      shutdown-timeout: 10s
      pool:
        max-active: 8
        max-wait: -1
        min-idle: 0

3、Redis配置类

/**
 * @author Lucas
 * date 2024/3/9 17:37
 * description Redis配置类
 */
@Configuration
public class RedisConfig {

    /**
     * 序列化相关配置新信息
     * @param connectionFactory
     * @return
     */
	@Bean
	public ReactiveRedisTemplate<String, Object> reactiveRedisTemplate(ReactiveRedisConnectionFactory connectionFactory) {
		RedisSerializationContext.RedisSerializationContextBuilder<String, Object> builder =
				RedisSerializationContext.newSerializationContext();
		Jackson2JsonRedisSerializer<Object> jsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
		ObjectMapper objectMapper = new ObjectMapper();
		objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
		jsonRedisSerializer.setObjectMapper(objectMapper);
		StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
		builder.key(stringRedisSerializer);
		builder.value(jsonRedisSerializer);
		builder.hashKey(stringRedisSerializer);
		builder.hashValue(jsonRedisSerializer);
		return new ReactiveRedisTemplate<>(connectionFactory,builder.build());
	}
}

4、代码实现

/**
 * @author Lucas
 * date 2024/3/6 18:23
 * description 测试Redis
 */
@Slf4j
@Component
public class RedisTest {

    @Resource
    private ReactiveRedisTemplate<String, String> reactiveRedisTemplate;

    /**
     * 获取KEY数据
     * @param key
     * @return
     */
    public Mono<String> getTestRedis(String key){
        return reactiveRedisTemplate.opsForValue().get(key).defaultIfEmpty("").flatMap(i -> {
            if(StrUtil.isBlank(i)){
                log.info("未获取到任何信息,key:{}",key);
                Mono.error(new Exception("未获取到redis任何信息"));
            }
            return Mono.just(i);
        });
    }

    /**
     * 新增redis数据
     * @param key
     * @param value
     * @return
     */
    public void setTest(String key, String value){
        reactiveRedisTemplate.opsForValue().set(key, value, Duration.ofMinutes(5)).subscribe(logs -> {
            log.info("新增缓存信息,信息内容key:{},value:{},结果:{}", key, value, logs);
        });
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值