복붙노트

[REDIS] 레디 스 : 어떻게 다른 키의 값과 동일한 하나의 키를 설정하는 방법?

REDIS

레디 스 : 어떻게 다른 키의 값과 동일한 하나의 키를 설정하는 방법?

내가 다음을 수행 할 수 있습니다 레디 스에있는 빠른 명령이 있나요

나는 Y는 키 X의 값과 동일한 키 값을 설정합니다.

어떻게 레디 스 클라이언트에서이 일을 가야합니까.

나는 표준 레디 스-CLI 클라이언트를 사용합니다.

나는 기본적으로는 다음의 몇 가지 상당 찾고 있어요 -

 Y.Val() = X.Val()

해결법

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

    1.당신은 루아 스크립트를 사용하여이 작업을 수행 할 수 있습니다

    당신은 루아 스크립트를 사용하여이 작업을 수행 할 수 있습니다

    redis.call('SET', KEYS[2], redis.call('GET', KEYS[1])); return 1;
    

    사용 SCRIPT의 LOAD 아래의 예는 스크립트가 다음 인수를 전달 EVALSHA를 사용하여 원용을 만들 수 있습니다 :

    산출:

    redis 127.0.0.1:6379> set src.key XXX
    OK
    redis 127.0.0.1:6379> get src.key
    "XXX"
    redis 127.0.0.1:6379> SCRIPT LOAD "redis.call('SET', KEYS[2], redis.call('GET', KEYS[1])); return 1;"
    "1119c244463dce1ac3a19cdd4fda744e15e02cab"
    redis 127.0.0.1:6379> EVALSHA 1119c244463dce1ac3a19cdd4fda744e15e02cab 2 src.key target.key
    (integer) 1
    redis 127.0.0.1:6379> get target.key
    "XXX"
    

    단순히 GET 다음의 SET 일에 비해 많은 재료가 될 것으로 보인다 않지만, 스크립트를로드 (및 SHA1을 기억) 일단 당신은 반복해서 다시 사용할 수 있습니다.

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

    2.당신이 원하는 스크립트 로딩을 해달라고 경우 아래 하나의 명령으로 작동합니다.

    당신이 원하는 스크립트 로딩을 해달라고 경우 아래 하나의 명령으로 작동합니다.

       127.0.0.1:6379> eval "return redis.call('SET', KEYS[2], redis.call('GET', KEYS[1]))" 2 key1 key2
       OK
    

    키 1의 값이 이미 다른 설정해야하는 것으로 당신은 오류가 아래를 얻을 것이다

    그래서 다음과 세트처럼 확인

    127.0.0.1:6379> GET key1
    (nil)
    127.0.0.1:6379> SET key1 hello
    OK
    

    지금은 작동합니다.

    당신은 또 다른 새로운 맵 키에 맵을 복사하려면

    eval "return redis.call('HMSET', KEYS[2], unpack(redis.call('HGETALL', KEYS[1])))" 2 existingMapKey newMapKey
    

    삽입 시간 자체가 당신이 MSET를 사용하여 두 개의 키에 값을 삽입 할 수있는 동안 또 하나의 방법입니다.

    redis> MSET key1 "Hello" key2 "Hello"
    "OK"
    redis> GET key1
    "Hello"
    redis> GET key2
    "Hello"
    

    물론이 키가 이미 생성 될 때 복사의 문제가 해결되지 않습니다.

    또한 레디 스 개 이상의 키가 같은 값 객체를 언급하고있는 방법은 없습니다 있습니다. 이러한 모든 해결 방법은 중복 값 객체를 생성합니다. 그래서 업데이트되는 값 중 하나가 다른 값 오브젝트에 반영되지 않습니다.

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

    3.아니,이 작업을 수행 할 빠른 명령이 없습니다. 당신은 소스 키의 값을 GET 한 다음 새 키의 값을 설정해야합니다.

    아니,이 작업을 수행 할 빠른 명령이 없습니다. 당신은 소스 키의 값을 GET 한 다음 새 키의 값을 설정해야합니다.

    출처 : http://redis.io/commands#string

  4. from https://stackoverflow.com/questions/10891213/redis-how-to-set-one-key-equal-to-the-value-of-another-key by cc-by-sa and MIT license