java - 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 作为哈希值和值序列化器。
我该如何解决?
解决方案
我用大于 Integer.MAX 的值进行了测试,Spring 能够将其转换为 Long 值。
对于小于 Integer.MAX 的值,它将转换为 Integer。对于大于 Integer.MAX 的值,它将转换为 Long。
推荐阅读
- typescript - 打字稿:使用带有键字典的接口定义对象的初始状态
- javascript - 当前更改完成后,有没有办法更新 Slate 更改?
- r - 集成分类器的性能会不如最好的单一分类器吗?
- c# - UWP AdvancedCollectionView 按日期时间排序?抛出异常
- tensorflow - 在张量流中按规范裁剪权重?
- angular - Angular + NET Core “(未知 url)的 Http 失败响应:0 未知错误”
- linux - 安装 ubuntu 18.04(双启动)后无法登录 Elementary
- cmake - CMAKE:更新函数中的列表不起作用
- salesforce - Power BI SFDC 对象连接 - 任务 - 导航查询错误
- sql - 如何在 Django 中创建一个忽略 NULL 的唯一约束?