2014-10-18 4 views
3

또는 질문이 있어야합니다 : 숫자로 문자열을 표현하는 가장 좋은 방법은 숫자 표현을 정렬하면 문자열로 정렬 된 것과 같은 결과를 얻을 수 있습니다. 문자열 당 최대 9 개의 문자를 정렬 할 수있는 방법을 고안했지만 더 좋은 방법이 있어야 할 것 같습니다.Redis 정렬 집합 (zset)의 점수로 문자열을 사용하는 방법은 무엇입니까?

사전에 Redis의 사전 편집 명령을 사용한다고 생각하지 않습니다.

예 : ZINTERSTORE를 사용하여 이름에 따라 정렬 된 ID 목록을 신속하게 가져올 수 있도록 일부 ID에 연결된 모든 이름을 미리 가정한다고 가정합니다 (redis 'SORT를 사용하지 않고 명령). 이상적으로는 ID를 zset의 구성원으로 사용하고 각 이름의 숫자 표현은 zset의 점수가됩니다. 이해

합니까? 아니면 내가 잘못 생각할 것인가?

+0

구현하려는 것은 무엇입니까? 당신의 유스 케이스는 무엇입니까? –

+1

우리는 이러한 유스 케이스에 항상 ['ZRANGEBYLEX'] (http://redis.io/commands/zrangebylex)를 사용합니다. 예 (루아) 'CDATA = redis.call ( 'zrangebylex' cSliceKey, '['.. cSliceFilter, '('.. .. cSliceFilter '\ 001')이 예에서 ' , 우리는 구분 기호로 chr (0)을 사용합니다. –

답변

1

각 ID의 점수를 생성하기 위해 해시 함수를 유지하는 순서를 사용하려고합니다. 당신이 그것을 작성한 것처럼 보일지라도, 당신은 이미 스코어의 범위가 처음 9 글자만을 사용할 수 있다는 것을 알았습니다 (당신의 함수 btw를 보는 것이 흥미로울 것입니다). 대신이 방법의

여기 IMO 쉬울 것 간단한 하나 - 형태 <name>:<id>의 세트 구성원을 사용하고 당신은 이런 식으로 사전 편찬 순서를 사용할 수 있습니다 0으로 점수를 설정하고에 split(':') 같은 것을 사용 세트의 멤버에서 ID를 가져옵니다.

+1

브릴리언트! 마지막에 ID를 추가하는 것을 고려하지 않았습니다. 아마도 점수를 1로 설정하기 때문에 가중치가있는 함수를 사용할 수 있습니다. 다시 감사합니다. – timbur

+0

음 저는 방금 앉아서이 질문에 관한 프로젝트를 시작했고, 제가하고 싶은 일이나 적어도 내가 원하는만큼 효과적이지 않을 것이라고 즉시 깨달았습니다. 나는 할 수 있기를 바란다. ZINETSTORE를 사용하여 일련의 ID를 ZSET과 교차 시키십시오. 그러면 ZSET이 ID를 구성원으로 사용해야합니다. – timbur

+0

메일 링리스트 - 계속 토론 : https://groups.google.com/d/msg/redis-db/ifmotqIDwi8/2A6yG4pgYJsJ –

관련 문제