Правильный способ хранения списка объектов в Spring Data Redis Reactive
Мне нужно сохранить список объектов в Redis. Каждый элемент списка должен быть доступен по уникальному ключу. Для этого я думаю, что список объектов должен храниться как карта объектов в Redis (я преобразовал в String перед тем, как сохранить его):
{
"code1": {
//object1
},
"code2": {
//object2
},
"code3": {
//object3
}
//object n...
}
Я использовал этот подход, когда реализовал его с помощью RedisTemplate (императивный способ). Теперь я использую Reactive Redis, и мне хотелось бы знать, что будет правильным. Я вижу, что в Spring Redis существует
ReactiveListOperations
интерфейс.
На данный момент у меня есть следующий код, но когда я его выполнил, Redis не возвращает никакого значения. Хотелось бы, чтобы я использовал правильный подход для его реализации.
@Service
@RequiredArgsConstructor
public class Service {
private final Client client;
private final ReactiveRedisTemplate<String, Map> reactiveRedisTemplate;
@Override
public Mono<Element> getElement(String name) {
return reactiveRedisTemplate.opsForValue().get(Constants.KEY_LIST)
.switchIfEmpty(Mono.defer(() -> {
//I get a map from the service when info is not stored in Redis
log.debug("Redis does not contain key: {}", Constants.KEY_LIST);
return this.client.getMap()
.doOnSuccess(mapFromService -> redisTemplate.opsForValue()
.set(Constants.KEY_LIST, mapFromService));
}))
.map(map -> {
//I suppose that flow continues here when Redis find the key in Redis
log.debug("Map from Redis: {}", map);
if (!map.containsKey(name)) {
return this.client.getMap()
.doOnSuccess(mapFromService -> reactiveRedisTemplate.opsForValue()
.set(Constants.KEY_LIST, mapFromService));
}
return map;
}).map(map -> {
//I get the specific element from the map
return map.get(name);
});
}
}
Заранее спасибо!