복붙노트

[REDIS] 패턴 매칭 키의 개수

REDIS

패턴 매칭 키의 개수

어떻게 일치하는 패턴이 모든 키의 수를 찾을 수 있습니다.

임의의 텍스트-1과 ABC : 임의의 텍스트-2 예를 들어, 두 개의 키 ABC가있다. 일반적인 패턴은 여기 isabc :. 그래서, 여기에 수는 2입니다.

어떻게 레디 스에서이 작업을 수행 할 수 있습니다?

해결법

  1. ==============================

    1.부인 나는이 오래된 대답은 키의 수백만, 모든 생산 시스템을 손상하지 않은 바랍니다. 당신은 아직도 여전히 어떤 이유로 생산에 일치하는 패턴을보다 효율적으로 사용할 스캔을 레디 스의 일치하는 키를 계산합니다.

    부인 나는이 오래된 대답은 키의 수백만, 모든 생산 시스템을 손상하지 않은 바랍니다. 당신은 아직도 여전히 어떤 이유로 생산에 일치하는 패턴을보다 효율적으로 사용할 스캔을 레디 스의 일치하는 키를 계산합니다.

    당신은 단순히 키를 검색 할 경우, 레디 스 클라이언트와, 당신이 좋아, 당신이 일치하는 키의 번호 목록을받을 수 있습니까?

    EG

    KEYS abc:*
    

    당신에게 줄 것이다

    1) abc:random-text-1
    2) abc:random-text-2
    

    또는 다음을 실행할 수 있습니다 :

    ./redis-cli KEYS "abc:*" | wc -l
    

    당신은 출력으로 2를 얻을 것이다.

  2. ==============================

    2.여기에서:

    여기에서:

    eval "return #redis.pcall('keys', 'abc:*')" 0
    

    그것은 O (1), 그러나 적어도 카운트가 서버 측에서 수행 아니다.

  3. ==============================

    3.성능을 고려하여, 나는 당신이 키를 사용하는 것이 좋습니다 않을 것

    성능을 고려하여, 나는 당신이 키를 사용하는 것이 좋습니다 않을 것

    나는 당신의 레디 스 버전> 2.8.0 경우, 스캔 고려 건의 할 것입니다. 그러나있는 데이터를 사용하려는 입력 의존하고 있습니다.

    여기 레디 스 문서로부터의 간단한 예이다 :

    redis 127.0.0.1:6379> sadd myset 1 2 3 foo foobar feelsgood
    (integer) 6
    redis 127.0.0.1:6379> sscan myset 0 match f*
    1) "0"
    2) 1) "foo"
       2) "feelsgood"
       3) "foobar"
    
  4. ==============================

    4.그것은 한 번 일이 있다면 x_maras에 의해 설명 된대로 키를 사용할 수 있지만, 키는 전체 데이터베이스에서 호출 될 때마다 모든 키를 스캔하기 때문에 당신은 당신의 코드에서 그것을 사용하지 말아야합니다.

    그것은 한 번 일이 있다면 x_maras에 의해 설명 된대로 키를 사용할 수 있지만, 키는 전체 데이터베이스에서 호출 될 때마다 모든 키를 스캔하기 때문에 당신은 당신의 코드에서 그것을 사용하지 말아야합니다.

    자주 그렇게하려면, 항상 심지어 SCAN을 사용하여 모든 키를 (스캔 상당히 비효율적 일 수 있기 때문에 그냥에서 키와 같은 일을하고있을 것이기 때문에 당신이 쓴 그대로 더 "좋은"방법이 없다 안전한 방식).

    그러나 미리 알려진 필요로하는 패턴 경우, 당신은 패턴과 일치하는 모든 키 세트를 유지할 수 있습니다.

    SET abc:random-text-1 "blah"
    SADD patterns:abc abc:randomtext-1
    
    SET abc:random-text-2 "more blah"
    SADD patterns:abc abc:randomtext-2
    
    SCARD patterns:abc
    // (integer) 2
    
    SORT patterns:abc BY nosort GET *
    // 1) "blah"
    // 2) "more blah"
    
  5. ==============================

    5.명령 줄에서, 레디 스-CLI --scan --pattern 'ABC : *'| 화장실 -l

    명령 줄에서, 레디 스-CLI --scan --pattern 'ABC : *'| 화장실 -l

  6. from https://stackoverflow.com/questions/20418529/count-of-keys-matching-a-pattern by cc-by-sa and MIT license