1、使用 hscan 模糊查询key时,提示JedisMovedDataException: MOVED 3348 xxx.xxx.xxx.xx:8317 ,表示使用的是Redis群集。而 Jedis 不是集群模式
可能出现的原因:
a、redis 配置为集群配置,操作使用的为Jedis单一节点,如遍历masterNodes 获取各主节点数据,然后再合并
//一些封装工具实现方式 for (JedisPool tpool : nodes.values()) { Jedis client = tpool.getResource(); //todo xxx }
改成JedisCluster 再次尝试:redisClient.getClient().hscan(new ScanParams().match(matchHKey).count(1000)) ,异常消失
String cursor = "0"; ScanParams scanParams = new ScanParams().match(matchHKey).count(1000); do { //使用jedisCluster ScanResult<Map.Entry<String, String>> entryScanResult = redisClient.getClient().hscan(key, cursor, scanParams); //获取游标 cursor = entryScanResult.getCursor(); List<Map.Entry<String, String>> entryList = entryScanResult.getResult(); for (Map.Entry<String, String> entry : entryList) { if (EnumReadStatus.READ.code.equals(entry.getValue())) { msgInfo.getUserReadList().add(entry.getKey()); } else { msgInfo.getUserUnreadList().add(entry.getKey()); } } log.info("本次检索数据{}条",entryList.size()); } while (!"0".equals(cursor));
参考:https://github.com/spring-projects/spring-data-redis/issues/2185