使用redisson的RMap缓存HashMap出现java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer的异常,代码如下:
@Autowired
private RedissonClient redisson;
/**
* 下面的代码会报错
*/
@Test
public void testRedissonMap(){
try {
String mapGroup = "TEST_MAP_GROUP_2";
String key = "TEST_KEY_2";
RMap<String, Map<Integer, Integer>> rMap = redisson.getMap(mapGroup);
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for(int i = 0; i < 10; i++){
map.put(i, i);
}
rMap.put(key, map);
map = rMap.get(key);
map.forEach(new BiConsumer<Integer, Integer>() {
@Override
public void accept(Integer t, Integer u) {
System.out.println("数据集:" + t + "," + u);
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
上面的代码出现异常是在较低版本的redisson,我最开始使用的版本是3.8.0出现上面的错误,后来在github提交issue:
https://github.com/redisson/redisson/issues/2025
升级redisson版本为目前最新版本3.10.5后,不再报错,可正常使用。出现此问题的朋友可以考虑升级最新的redisson版本。