Исходный код
Код: Выделить всё
private static final int FETCH_LIMIT = 1000;
private void getResponseForSubsetOfKeys(Set keys,
Map responseForAllKeys,
int numIterations) {
Set subSetKeys = keys.stream()
.skip((long) numIterations * FETCH_LIMIT)
.limit(FETCH_LIMIT)
.collect(Collectors.toSet());
RMap rMap = createCacheIfNotExists();
Map response = rMap.getAll(subSetKeys);
responseForAllKeys.putAll(response);
}
Код: Выделить всё
Object value = rMap.get(key);
- всегда возвращает правильные данные
Код: Выделить всё
rMap.get(key) - возвращает неверные данные, если FETCH_LIMIT большой (например, 1000)
Код: Выделить всё
rMap.getAll(subSetKeys) - Поле, которое должно быть строкой, иногда десериализуется как HashSet
- Уменьшение FETCH_LIMIT решает проблему
- Сортировка ключей или использование LinkedHashSet не помогает.
- Сами данные Redis не повреждены
Код: Выделить всё
rMap.get("4546") -> payrollId = "12345"
rMap.getAll(largeBatch).get("4546") -> payrollId = HashSet
Вопрос
- Известна ли это проблема или ограничение Redisson RMap.getAll() для больших пакетов?
- Существует ли рекомендуемый максимальный размер пакета?
- Исправлено ли это в какой-либо версии Redisson или требуется другой кодек?
- Redisson 3.x
- Java
- Redis
- Кодек Redisson по умолчанию
Для любого ключа, хранящегося в кеше, вызовы rMap.get(key) и rMap.getAll(keys).get(key) должны возвращать один и тот же объект, независимо от размера пакета.
В частности, поля, хранящиеся как String (например, payrollId), всегда должны быть десериализованы как String.
Фактическое поведение
- При получении одиночного ключа с помощью rMap.get(key) объект всегда десериализуется правильно.
- При получении небольших пакетов с помощью rMap.getAll(subSetKeys) данные также верны.
- При получении больших пакетов (например, FETCH_LIMIT = 1000) с использованием rMap.getAll, некоторые объекты десериализуются неправильно.
- В этих случаях поле, которое должно быть строкой, десериализуется как HashSet.
- Уменьшение размера пакета решает проблему.
Подробнее здесь: https://stackoverflow.com/questions/798 ... rge-batche
Мобильная версия