Spring Boot反应式Redis连接

问题描述

我是Redis反应式实现的新手。我正在尝试设置一个在localhost:6379(认位置)上使用Redis的后端。现在documentation说:“如果要连接到本地主机:6379的Redis服务器,我们不需要添加任何配置代码。”

所以我像往常一样开始重做:

enter image description here

提出了一个简单的发帖请求

{
    "uid":"123","message":"hello world"
}

此控制器

@PostMapping("/api/v1/space/post/")
@ResponseBody
public ResponseEntity<String> postMessage(@RequestBody Message message) throws Exception {
    if(messageService.postMessage(message.getUid(),message.getMessage())){
        return ResponseEntity.ok("it works!");
    } else{
        return ResponseEntity.badRequest().body("something's wrong");
    }
    
}

一切都很好,日志甚至指出已经创建了哈希。但是,当我执行redis-cli并检查任何键时,什么都没有。

enter image description here

我也尝试使用LettuceConnectionFactory进行连接

    @Bean
public ReactiveRedisConnectionFactory reactiveRedisConnectionFactory() {
    return new LettuceConnectionFactory("localhost",6379);
}

还没有运气,我猜想弹簧靴以某种方式连接到了我不需要的嵌入式Redis,那么如何连接到Redis实例?

编辑

这是邮件回购和服务 仓库返回一个MonoIgnorePublisher,在文档中,Mono返回一个元素或错误,这是错误吗? :

回购:

private final ReactiveRedisOperations<String,Message> redistemplate;

    public MessageRepository(ReactiveRedisOperations<String,Message> redisOperations) {
        this.redistemplate = redisOperations;
    }

    public Mono<Void> save(String authorId,String msg) {
        Message message = new Message(authorId,msg);
        Mono<Void> res = Mono.when(redistemplate.<String,Message>opsForHash().put("space",message.getId(),message),redistemplate.opsForZSet().add(message.getUid(),message,message.getTimestamp().toEpochDay())).then();
        System.out.println(res.toString());
        return res;
    }

服务:

    @Autowired
    private MessageRepository repo;
public Boolean postMessage(String authorId,String msg) throws Exception {
        try{
            repo.save(authorId,msg);
        }
        catch (Exception e){
            throw new Exception(e);
        }
        return true;       
    }

这是ReactiveRedisOperation配置:

@Bean
public ReactiveRedisOperations<String,Message> redisOperations(ReactiveRedisConnectionFactory factory) {
    Jackson2JsonRedisSerializer<Message> serializer = new Jackson2JsonRedisSerializer<>(Message.class);

    RedisSerializationContext.RedisSerializationContextBuilder<String,Message> builder = RedisSerializationContext
            .newSerializationContext(new StringRedisSerializer());

    RedisSerializationContext<String,Message> context = builder.value(serializer)
            .hashKey(new StringRedisSerializer()).hashValue(serializer).build();

    return new ReactiveRedistemplate<>(factory,context);
}

解决方法

请将属性键设为 spring.redis.port 和 spring.redis.host。它会起作用。