복붙노트

[REDIS] 레디 스는 : 정렬과 이웃 키 N를 얻을 수

REDIS

레디 스는 : 정렬과 이웃 키 N를 얻을 수

이 전 레디 스에서 이러한 쌍을 가지고 있다고 가정 해 봅시다 :

1237.56 "John"
1224.59 "Robert"
1213.34 "Mahmoud"
1242.90 "George"
1020.11 "Mary"
1723.09 "Jay"
1589.77 "Khan"
1106.62 "Albert"

키는 항상 소수점 수입니다. 번호를 제공 할 때, 나는 가장 가까운 번호를 양방향으로 두 개의 키를 좀하고 싶습니다.

나는 1242의 이웃을 검색하는 경우 예를 들어, 결과 집합이 있어야합니다

1224.59 "Robert"
1237.56 "John"
1242.90 "George"
1589.77 "Khan"

이게 가능해? 나는 아직도 어떤 도움 레디 스 덕분에 새로운 해요.

해결법

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

    1.예와 아니오 같은 시간.하지

    예와 아니오 같은 시간.하지

    예 이유는 무엇입니까? 단 하나의 데이터 유형을 레디 스 - 소트 세트는 소수점에 따라 값의 범위를 얻을 수 있습니다. 그래서 ZRANGEBYSCORE하면 점수 범위로 값을 얻을 수 있습니다.

    ZRANGEBYSCORE theKey 1220 1600
    

    당신은 수요에 대한 데이터 세트를 제공합니다.

    왜 안돼? 귀하의 질문에 당신은 점수의 이웃에 대해 부탁드립니다. ZRANGEBYSCORE가 최대 점수 이에 분 점수의 값을 얻을 수 있습니다하지 "미만 주어진 얻을 X 값"또는 "X 값이 큰 다음 주어진".

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

    2.이 한계 zrangebyscore 매개 변수를 사용하여 가능하다. 두 쿼리를 확인해야합니다 - 하나는 양쪽에있는 이웃을 얻을 수 있습니다.

    이 한계 zrangebyscore 매개 변수를 사용하여 가능하다. 두 쿼리를 확인해야합니다 - 하나는 양쪽에있는 이웃을 얻을 수 있습니다.

    예를 들어, 당신은 더 적은이 같은 쿼리 외모 점수보다 점수와 N을 얻으려면 :

    zrangebyscore KEY <SCORE> +inf limit 0 <N>
    

    그리고이 같은보다 큰 점수로 N :

    zrevrangebyscore KEY +inf <SCORE> limit 0 <N>
    

    이 같은 key_sort : 당신이 소트 세트 테스트를했다 말 :

    "a": 10
    "b": 20
    "c": 30
    "d": 40
    "e": 50
    

    이어서 zrevrangebyscore 시험 : key_sort + 25 INF 제한 0~2 복귀 zrangebyscore C 및 시험 D : 한계 key_sort -INF 25 0 2 리턴, B

  3. from https://stackoverflow.com/questions/20273371/redis-sort-and-get-n-neighbour-keys by cc-by-sa and MIT license