首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以“`REDISJSON`”格式主动写信给`REDISJSON`

以“`REDISJSON`”格式主动写信给`REDISJSON`
EN

Stack Overflow用户
提问于 2022-09-30 20:41:09
回答 2查看 190关注 0票数 0

我使用ReactiveRedisOperations和莴苣的驱动程序来给Redis写信。

代码语言:javascript
复制
@Autowired
ReactiveRedisOperations<String, Foo> redisOperation;

public Mono<Boolean> save(Foo foo) {
    redisOperation.map(operation -> 
     operation
     .opsForValue()
     .set(foo.getId(), foo);

    return Mono.just(true);
}

序列化定义为

代码语言:javascript
复制
    private <T> ReactiveRedisOperations<String, T> buildRedisOperations(ReactiveRedisConnectionFactory factory, Class<T> clazz) {
        RedisSerializationContext.RedisSerializationContextBuilder<String, T> builder = RedisSerializationContext
                .newSerializationContext(new StringRedisSerializer());
        Jackson2JsonRedisSerializer<T> serializer = new Jackson2JsonRedisSerializer<>(clazz);
        RedisSerializationContext<String, T> context = builder.value(serializer).build();
        return new ReactiveRedisTemplate<>(factory, context);
    }

但是,这可以将Foo对象的数据类型保存为String。我想将Foo对象保存在Redisjson数据类型中。

如何使用雷迪森格式对redis进行主动写入和保存?

PS:我不想为此使用lua script解决方案。

EN

回答 2

Stack Overflow用户

发布于 2022-10-11 07:00:55

ReactiveRedisOperations只用于basic redis操作(https://docs.spring.io/spring-data/redis/docs/current/api/org/springframework/data/redis/core/ReactiveRedisOperations.html)。

如果您想继续使用生菜和反应性操作,请使用https://github.com/redis-developer/lettucemod

此库提供RedisJSON支持

票数 1
EN

Stack Overflow用户

发布于 2022-10-11 14:39:32

您是否尝试过为ReactiveRedisTemplate类初始化专用Foo bean?

代码语言:javascript
复制
@Bean
public ReactiveRedisTemplate<String, Foo> reactiveRedisTemplate(ReactiveRedisConnectionFactory factory) {
    RedisSerializationContext.RedisSerializationContextBuilder<String, Foo> builder = RedisSerializationContext.newSerializationContext(new StringRedisSerializer());
    Jackson2JsonRedisSerializer<Foo> serializer = new Jackson2JsonRedisSerializer<>(Foo.class);
    RedisSerializationContext<String, Foo> context = builder.value(serializer).build();
    return new ReactiveRedisTemplate<>(factory, context);
}

并使用它在Redis中存储值。

代码语言:javascript
复制
@Autowired
ReactiveRedisTemplate<String, Foo> reactiveRedisTemplate;

public Mono<Boolean> save(Foo foo) {
    return reactiveRedisTemplate
          .opsForValue()
          .set(foo.getId(), foo);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73913760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档