redis中key数量越大,keys 命令执行越慢,由于6.x以下redis版本为单线程执行命令,因此keys命令可能会对redis服务产生阻塞,因此一般生产会禁用或者rename-command 此命令
在Java 中如果使用Jedis 开发,可以用scan命令代替keys命令,对于redis集群来说该命令不可以直接使用,需要遍历集群节点,找出所有满足规则的keys,实现案例参考:
/**
* scan
*/
@Override
public Set<String> scan(String matchPart,boolean prefixMatch, boolean suffixMatch) {
logger.info("scan input params:{},{},{}",matchPart,prefixMatch,suffixMatch);
if(StringUtils.isEmpty(matchPart) ) {
matchPart = "";
}
if(prefixMatch) {
matchPart = "*"+matchPart;
}
if(suffixMatch) {
matchPart = matchPart+"*";
}
Set<String> keys = new HashSet<>();
Collection<JedisPool> clusterNodes = jedisCluster.getClusterNodes().values();
for(JedisPool clusterNode : clusterNodes) {
String cursor = ScanParams.SCAN_POINTER_START;
List<St