【问题标题】:Spring data redis - Hash of Map<String, Long> is retrieved as Map<String, Integer>, how to fix this?Spring data redis - Map<String, Long> 的哈希被检索为 Map<String, Integer>,如何解决这个问题?
【发布时间】:2021-08-04 06:42:04
【问题描述】:

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

假设 hash 是“some hash”,hashkey 是“unique key” & hash value 是“Map”。

 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 而不是 Map

当存储在 Redis 中的 map 中的值大于 Integer.MAX 时,我会在 result map 中得到错误的值。

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

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

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

我该如何解决这个问题?

【问题讨论】:

    标签: java spring spring-boot redis spring-data-redis


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多