복붙노트

[REDIS] 레디 스는 - 여러 키의 값을 취득합니다

REDIS

레디 스는 - 여러 키의 값을 취득합니다

어떻게 소트 세트를 사용하여 레디 스에서 여러 키의 값을받을 수 있나요?

zadd Users 0 David
zadd Users 5 John
zadd Users 15 Linda
zrevrange Users 0 -1 withscores

이것은 두 사용자가있을 것입니다.

어떻게 키 '다윗'과 하나 개의 쿼리에서 '린다'와 사용자가 검색 할 수 있습니다?

해결법

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

    1.레디 스에 새 명령을 도입하지 않고 그것을 할 수있는 여러 가지 방법이 있습니다.

    레디 스에 새 명령을 도입하지 않고 그것을 할 수있는 여러 가지 방법이 있습니다.

    예를 들어, 당신은 당신이 다음 임시 세트와 ZSET 사이의 교차점을 계산에 관심이있는 이름을 가진 임시 세트를 채울 수 있습니다 :

    multi
      sadd tmp David Linda ... and more ...
      zinterstore res 2 tmp Users weights 0 1
      zrange res 0 -1 withscores
      del tmp res
    exec
    

    파이프 라인, 이것은 하나의 왕복을 생성합니다 당신은 TMP에 입력 매개 변수의 임의의 수를 채울 수 있습니다.

    레디 스 2.6로, 당신은 마지막으로 입력 목록을 수용하고 원하는 결과를 반환 명령을 얻을 수있는 서버 측 루아 스크립트에이 라인을 포장 할 수 있습니다 :

    eval "redis.call( 'sadd', 'tmp', unpack(KEYS) );
          redis.call( 'zinterstore', 'res', 2, 'tmp', 'Users', 'weights', 0, 1 );
          local res = redis.call( 'zrange', 'res', 0, -1, 'withscores' );
          redis.call( 'del', 'res', 'tmp' ) ; 
          return res
         " 2 David Linda
    

    안전하게 쉽게 스크립트를 사용하여 구현 된 수 있다면 새로운 명령 레디 스에 추가되지 않습니다 가정 할 수있다.

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

    2.당신은 레디 스 MGET을 사용할 수 있습니다

    당신은 레디 스 MGET을 사용할 수 있습니다

    redis> MGET key1 key2 nonexisting
    1) "Hello"
    2) "World"
    3) (nil)
    

    자세한 내용은 여기 http://redis.io/commands/mget

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

    3.당신이 분류되어 아이템 거래를 원하기 때문에 하나는 소트 세트를 사용합니다. 당신은 무엇을 요구하는 것은 소트 세트로 정렬 된 세트를 사용하지 않는 것입니다. 당신이 정렬 순서 상관하지 않는 경우, 아마도 소트 세트는 당신이 찾고있는 것이 아니다. 이미 여러 키하지만, 임의없는 사람을 검색 할 수 있습니다.

    당신이 분류되어 아이템 거래를 원하기 때문에 하나는 소트 세트를 사용합니다. 당신은 무엇을 요구하는 것은 소트 세트로 정렬 된 세트를 사용하지 않는 것입니다. 당신이 정렬 순서 상관하지 않는 경우, 아마도 소트 세트는 당신이 찾고있는 것이 아니다. 이미 여러 키하지만, 임의없는 사람을 검색 할 수 있습니다.

    기본 목표는 여러 임의의 키를 검색 할 경우, 해시 및 hmget를 사용합니다. 기본 필요가 정렬 된 세트에 액세스하는 경우, 사용을 설정하고 스크립트 경로 또는 파이프 라인 zscore 전화의 일련의 이동 중 소트.

  4. ==============================

    4.당신은 하나의 명령으로이를 얻을 수 없습니다. 가장 가까운 하나 개의 응답을 얻기 위해 수행 할 수 있습니다

    당신은 하나의 명령으로이를 얻을 수 없습니다. 가장 가까운 하나 개의 응답을 얻기 위해 수행 할 수 있습니다

    MULTI
    ZSCORE Users David
    ZSCORE Users Linda
    EXEC
    

    편집 : 다른 방법으로, 사용자의 점수 병렬 해시 유지하고, 함께 조회 할 수 있습니다

    HMGET UserScores David Linda
    
  5. from https://stackoverflow.com/questions/10814828/redis-get-value-of-multiple-keys by cc-by-sa and MIT license