被检索为 Map,如何解决这个问题?,java,spring,spring-boot,redis,spring-data-redis"/>

首页 > 解决方案 > Spring data redis - Map的Hash被检索为 Map,如何解决这个问题?

问题描述

我正在使用 Spring Data Redis 并使用哈希操作将 Map<String, Long> 保存为 Redis 中的哈希。

假设 hash 是“some hash”,hashkey 是“unique key” & hash value 是“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 中的 map 中的值大于 Integer.MAX 时,我会在结果map 中得到错误的值。

在此处输入图像描述

我可以通过 Redis-CLI 保存 10 倍的 Integer.MAX 值。似乎 Redis 整数的范围与 Java Integer 不同。

通过 Redis CLI 我可以得到一个很大的整数值,但是在 Java 上,返回类型是 Java 整数,这对于 Long 值不起作用。

我使用 Jackson2JsonRedisSerializer 作为哈希值和值序列化器。

我该如何解决?

标签: javaspringspring-bootredisspring-data-redis

解决方案


我用大于 Integer.MAX 的值进行了测试,Spring 能够将其转换为 Long 值。

对于小于 Integer.MAX 的值,它将转换为 Integer。对于大于 Integer.MAX 的值,它将转换为 Long。


推荐阅读