Spring data redis - хэш Map‹String, Long› извлекается как Map‹String, Integer›, как это исправить?

Я использую Spring Data Redis и использую хеш-операции для сохранения Map‹String, Long› как хеш в Redis.

Предположим, что хеш — это некоторый хеш, хэш-ключ — это уникальный ключ, а хэш-значение — это Map‹String, Long›.

 Map<String,Long > data= new HashMap<>());
 data.put("k", 21474836470); //value = Integer.MAX*10

 hashOperations.put("some hash", "unique key", data);

 Map<String,Integer> result = hashOperations.get( "some hash", "unique key");

Проблема здесь в том, что результатом является Map‹String, Integer› вместо Map‹String, Long›.

Когда значение на карте, хранящейся в Redis, больше, чем Integer.MAX, я получу неправильное значение на карте result.

введите здесь описание изображения

Я могу сэкономить 10-кратное значение Integer.MAX через Redis-CLI. Кажется, диапазон целого числа Redis отличается от целого числа Java.

Через интерфейс командной строки Redis я могу получить большое значение целого числа, но в Java тип возвращаемого значения — целое число Java, которое не будет работать для длинного значения.

Я использую Jackson2JsonRedisSerializer в качестве сериализатора хеш-значений и значений.

Как это исправить?


person AConsumer    schedule 14.05.2021    source источник


Ответы (1)


Я тестировал значение больше, чем Integer.MAX, и Spring может преобразовать его в значение Long.

Для значений меньше, чем Integer.MAX, он преобразуется в целое число. Для значений больше, чем Integer.MAX, он преобразуется в Long.

person AConsumer    schedule 14.05.2021