복붙노트

[REDIS] 레디 스 : 어떻게 정렬 된 세트 "보통"세트가 교차하는?

REDIS

레디 스 : 어떻게 정렬 된 세트 "보통"세트가 교차하는?

(즉, 더 나은 것인지 또는 소트 세트 또는 목록) 내가 100 1000 문자열의 집합을 가정합니다.

그럼 난 더 많은 문자열의 정렬 된 세트 B가 100 만명을 말한다.

지금은 C (물론 문자열)는 A와 B의 교점이 될 것이다.

나는 X는 C.에있는 모든 튜플 (X, SCORE_OF_X_IN_B)를 갖고 싶어

어떤 아이디어?

나는이 개 아이디어를 가지고 :

1. 레디 스 측에 너무 많은 오버 헤드 방법이 있지만 (예를 들어 쓰기해야하는 페이지가 너무 http://redis.io/commands/zinterstore을 매우 높은 시간 복잡도를 말한다 레디 스.) 2. 것 | A | 데이터베이스 연결은 좋은 선택하지 않을 것이다.

어쩌면 내가 zscore처럼하지만, 캐릭터 라인의 임의의 숫자와 함께 작동하는 레디 스 / 루아 스크립트를 작성할 수 있지만, 나는 확실하지 내 호스팅 스크립트를 허용하는 경우 해요 ...

난 그냥 스크립트없이 사용할 수있는 우아하고 빠른 해결책이있는 경우, SO 물어보고 싶은게 그래서!

해결법

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

    1.문제에 대한 간단한 해결책이있다 : ZINTERSTORE는 SET와 ZSET 작동합니다. 시험:

    문제에 대한 간단한 해결책이있다 : ZINTERSTORE는 SET와 ZSET 작동합니다. 시험:

    redis> sadd foo a
    (integer) 1
    redis> zadd bar 1 a
    (integer) 1
    redis> zadd bar 2 b
    (integer) 1
    redis> zinterstore baz 2 foo bar AGGREGATE MAX
    (integer) 1
    redis> zrange baz 0 -1 withscores
    1) "a"
    2) "1"
    

    편집 : 레디 스 무엇이든으로는 (분류) 세트 줄에이 점수를하는 (비 분류) 설정 foo는 각 부재 (1)의 기본 점수를 제공하고, SUM 때문에 나는 위의 AGGREGATE MAX를 추가했다.

  2. from https://stackoverflow.com/questions/10500695/redis-how-to-intersect-a-normal-set-with-a-sorted-set by cc-by-sa and MIT license