一、Redis集群key查询实现(scan)
CommandObjects commandObjects = new CommandObjects();
Set<String> keys = new HashSet<>();
Map<String, ConnectionPool> map = jedisCluster.getClusterNodes();
for(Map.Entry<String, ConnectionPool> entry: map.entrySet()){
Connection connection = entry.getValue().getResource();
ScanResult<String> scanResult = connection.executeCommand(commandObjects.scan("0", new ScanParams().match(keyMatch).count(Integer.MAX_VALUE)));
if(scanResult.getResult()!=null){
keys.addAll(scanResult.getResult());
}
}
二、Redis集群key批量查询实现(mget)
CommandObjects commandObjects = new CommandObjects();
Map<Connection, List<String>> keyMap = new HashMap<>();
for(String key: keys){
Connection connection = jedisCluster.getConnectionFromSlot(JedisClusterCRC16.getSlot(key));
List<String> keyList = keyMap.get(connection);
if(keyList == null){
keyList = new LinkedList<>();
keyMap.put(connection, keyList);
}
keyList.add(key);
}
Map<String, String> keyValueMap = new HashMap<>();
for(Map.Entry<Connection, List<String>> entry: keyMap.entrySet()){
Connection connection = entry.getKey();
String[] keyArr = entry.getValue().toArray(new String[0]);
List<String> values = connection.executeCommand(commandObjects.mget(keyArr));
for(int i=0; i< keyArr.length; i++){
String value = values.get(i);
if(value != null){
keyValueMap.put(keyArr[i], value);
}
}
}
5c7f75f4-6cc0-47b9-9bc2-7a3afff9c9ce