복붙노트

[REDIS] MIGRATE를 사용하여 레디 스 데이터베이스에있는 모든 키를 복사

REDIS

MIGRATE를 사용하여 레디 스 데이터베이스에있는 모든 키를 복사

이 마이그레이션을 사용하여 다른 원격 인스턴스 한 레디 스 인스턴스에서 모든 키를 복사 할 수 있습니까? 나는 복사, 운없이 교체 및 키 시도했습니다. 때마다 나는 NOKEY 응답을 얻을. 나는 그것이 작동하는 하나의 키를 사용하여 마이그레이션 명령 중 하나를 사용하는 경우.

예를 들면 :

MIGRATE my.redis 6379 "*" 0 5000 REPLACE // NOKEY
MIGRATE my.redis 6379 "*" 0 5000 COPY // NOKEY
MIGRATE my.redis 6379 "" 0 5000 KEYS * // NOKEY

MIGRATE my.redis 6379 "" 0 5000 KEYS test // OK

해결법

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

    1.이것은 내가 의견을 게시 할 수 없습니다 오전부터 @ezain에서 제공하는 대답에 개선이다. 이 명령은 키의 일괄 처리를위한 올바른 레디 스 구문을 사용하지만, xargs를의 인수는 명령에서 호출되는 결과를 단 한 번 모두를 가진 그것보다 완료하는 데 더 많은 시간이 걸릴 것이다 수단에 포함 된 키 (대신 모든 키에 대해 한 번 필수적이다). 다음은 모든 경우에 훨씬 더 빨리 될 것입니다 :

    이것은 내가 의견을 게시 할 수 없습니다 오전부터 @ezain에서 제공하는 대답에 개선이다. 이 명령은 키의 일괄 처리를위한 올바른 레디 스 구문을 사용하지만, xargs를의 인수는 명령에서 호출되는 결과를 단 한 번 모두를 가진 그것보다 완료하는 데 더 많은 시간이 걸릴 것이다 수단에 포함 된 키 (대신 모든 키에 대해 한 번 필수적이다). 다음은 모든 경우에 훨씬 더 빨리 될 것입니다 :

    레디 스-CLI --raw KEYS '*'| xargs를의 레디 스-CLI MIGRATE "는"0 5000 키 6379를 my.redis

    목적지 인 경우 암호로 보호 :

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

    2.쉘에서 실행하려고

    쉘에서 실행하려고

    redis-cli keys '*' | xargs -I '{}' redis-cli migrate my.redis 6379 "" 0 5000 KEYS '{}'
    
  3. ==============================

    3.이 키를 명령에 레디 스 잠금을 피하기 위해 대신 키의 --scan 사용하는 것이 좋습니다 키의 많은 큰 DB를 들면 :

    이 키를 명령에 레디 스 잠금을 피하기 위해 대신 키의 --scan 사용하는 것이 좋습니다 키의 많은 큰 DB를 들면 :

    redis-cli --scan | xargs redis-cli MIGRATE my.redis 6379 "" 0 5000 KEYS
    

    정말 문제와 관련,하지만 경우에 사람이 필요하지 않습니다 : 레디 스 3.0 전에 암호로 MIGRATE을 지원하지 않습니다. 3.0 후에는 권한을 확인하는 AUTH 매개 변수를 추가 할 수 있습니다 :

    MIGRATE 192.168.0.33 6379 "" 0 5000 AUTH mypassword KEYS user:{info}:age
    
  4. ==============================

    4.나는 옹호하는이 사용하지 않는,하지만 난이 모든 예제를 시도하고, 많은 다른 사람과 작동하지 않았다. 그래서 어쩌면이 붙어 있습니다 다른 사람 도움이 될 것입니다, PHP에서 나 자신을하고 끝났다.

    나는 옹호하는이 사용하지 않는,하지만 난이 모든 예제를 시도하고, 많은 다른 사람과 작동하지 않았다. 그래서 어쩌면이 붙어 있습니다 다른 사람 도움이 될 것입니다, PHP에서 나 자신을하고 끝났다.

    <?php 
    
    $redisSource = new Redis();
    $redisSource->connect('1.2.3.4', 6379);
    $redisSource->auth('password');
    
    $redisTarget = new Redis();
    $redisTarget->connect('127.0.0.1', 6379);
    
    foreach($redisSource->keys('*') as $key) {
        $redisTarget->set($key, $redisSource->get($key));
    }
    
  5. from https://stackoverflow.com/questions/37166947/copying-all-keys-in-redis-database-using-migrate by cc-by-sa and MIT license