我使用ReactiveRedisOperations和莴苣的驱动程序来给Redis写信。
@Autowired
ReactiveRedisOperations<String, Foo> redisOperation;
public Mono<Boolean> save(Foo foo) {
redisOperation.map(operation ->
operation
.opsForValue()
.set(foo.getId(), foo);
return Mono.just(true);
}序列化定义为
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解决方案。
发布于 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支持
发布于 2022-10-11 14:39:32
您是否尝试过为ReactiveRedisTemplate类初始化专用Foo bean?
@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中存储值。
@Autowired
ReactiveRedisTemplate<String, Foo> reactiveRedisTemplate;
public Mono<Boolean> save(Foo foo) {
return reactiveRedisTemplate
.opsForValue()
.set(foo.getId(), foo);
}https://stackoverflow.com/questions/73913760
复制相似问题