>데이터 베이스 >Redis >Redis에서 모든 키를 얻는 방법

Redis에서 모든 키를 얻는 방법

PHPz
PHPz앞으로
2023-05-28 15:40:213533검색

keys: 특정 일반 문자열 규칙을 충족하는 모든 키를 나열하는 데 사용되는 전체 트래버스 키입니다. 현재 Redis가 프로덕션 환경에 있다고 가정하면 이 명령을 사용하면 Redis 데이터의 양이 상대적으로 클 때 숨겨진 위험이 발생합니다.

keys는 모든 정규 키를 한 번에 반환하므로 redis 지연이 발생합니다.

SCAN 반복자는 커서를 기반으로 하며 이전 반복 프로세스를 계속하려면 마지막 커서를 사용해야 합니다. 커서 0을 시작점으로 사용하여 새로운 순회 작업을 수행하고 명령이 커서 0으로 돌아갈 때까지 계속 반복하여 전체 순회를 완료합니다.

이 명령은 각 실행이 지정된 수의 요소를 반환한다는 것을 보장하지 않으며 심지어 0개의 요소를 반환할 수도 있습니다. 그러나 커서가 0이 아닌 한 프로그램은 SCAN 명령이 종료되었다고 생각하지 않습니다. 반환된 요소 수는 count 매개변수를 준수할 가능성이 높습니다. 또한 SCAN은 퍼지 쿼리를 지원합니다.

1.keys cmos-cache 패키지

redisCacheService.keys(String pattern);

2.스캔 방법

public static Set<String> getAllKey(String match,int count){
    //返回集
    Set<String> binKeys = new HashSet<>();
    //封装scan查询参数
    ScanParams param = new ScanParams().match(match).count(count);
    //获取查询对象
    RedisCacheServiceImpl redisCacheSer = (RedisCacheServiceImpl)RedisCacheService;
    JedisCluster jedisClu = redisCacheSer.getJedisCluster();
//getClueterNodes获取集群节点,从各个集群中获取值进行遍历
    jedisClu.getClusterNodes().values().stream().forEach(pool->{
        boolean done = false;//
        String cur = "0";//游标,以0开始,返回0代表一次结束
        try(Jedis jedisNode = pool.getResource()){
            while(!done){
                ScanResult<String> scanResult = jedisNode.scan(cur,param);
                cur = scanResult.getStringCursor();
                if("0".equals(cur){done=true};
                List<String> result = scanResult.getResult();
                result.foreach(data->{binKeys.add(data)});
            }
        }
    });
    return binKeys;
}

위 내용은 Redis에서 모든 키를 얻는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제