Перенос данных из кластера Redis в другой с помощью Redisson

Я хочу программно перенести данные из старого кластера Redis в новый, поэтому я сделал это:

        legacyRedisClient.getKeys()
            .getKeys()
            .forEach(key -> {
                LOGGER.info("Redis Migration : Migrating key {}", key);
                Optional.of(legacyRedisClient.getBucket(key))
                        .filter(RObject::isExists)
                        .map(RBucket::get)
                        .ifPresent(value -> {
                            LOGGER.info("Redis Migration : Storing element with key {}", key);
                            RBucket<Object> bucket = encryptedRedisClient.getBucket(key);
                            bucket.set(value);
                            bucket.expire(48L, DAYS);
                        });
            });

Проблема в том, что когда я делаю RBucket::get, Redisson пытается декодировать значение с классом, который не обязательно находится в пути к классам (потому что он был установлен другим микросервисом).

Есть ли способ отключить декодирование в Redisson? Или лучший способ сделать это?


person BnJ    schedule 18.10.2019    source источник
comment
Я на 100% уверен, что есть лучший способ переноса данных, чем наивный подход «получи 1, поставь 1». Я предлагаю вам покопаться в документации, чтобы увидеть, есть ли дополнительная информация.   -  person Kayaman    schedule 18.10.2019


Ответы (1)


Используйте БайтАррайКодек. Пример:

RBucket<Object> bucket = encryptedRedisClient.getBucket(key, ByteArrayCodec.INSTANCE);
bucket.set(value);
bucket.expire(48L, DAYS);
person Nikita Koksharov    schedule 24.11.2019