2013-10-18 7 views
0

큰 항목 (예 : 10K 항목)을 Redis에서 유지하는 가장 좋은 방법은 키로 항목을 효율적으로 검색하는 것입니다.REDIS : 임의 액세스 권한이있는 목록

Redis는 이것을 달성하는 Java의 OrderedHashMap과 동일한 데이터 구조가 없으므로 세트와 목록을 유지 관리하고 동기화 상태를 유지해야 할 수도 있습니다.

+0

무엇을 하시겠습니까? – raffian

+0

한 가지 예가 북마크와 비슷합니다. 나는 사용자의 북마크 목록을 유지하려고하지만 동시에 사용자가 이전에 특정 항목을 북마크에 추가했는지 여부를 감지합니다. 일반 목록을 사용하면 해당 검사는 O (N) 작업이됩니다. – mahemoff

답변

1

정렬 된 집합을 사용하십시오.

일부 북마크 추가; 시간 순으로 정렬 score의 현재 시간을 사용

> zrevrange bookmarks 3 3 
> "bk3" 
:

> zrank bookmarks "bk3" 
> "3" 

가 ... 다음 인덱스로 책갈피를 당겨 :

> zadd bookmarks 123 "bk1" 
> zadd bookmarks 456 "bk2" 
> zadd bookmarks 789 "bk3" 
> zadd bookmarks 999 "bk4" 

을 책갈피를 얻으려면, 먼저 인덱스를 필요

타임 스탬프를 사용하지 않으려는 경우 점수에 "1"을 사용하여 사전 식 사전을 정렬 할 수 있습니다.

> zadd bookmarks 1 "link_xyz" 
> zadd bookmarks 1 "link_abc" 
> zadd bookmarks 1 "link_foo" 

> zrange bookmarks 0 -1 

1) "link_abc" 
2) "link_foo" 
3) "link_xyz" 

색인 조회는 O(log(n))이고 색인에 따라 단일 구성원을 가져 오려면 O(log(n)+1)에 추가하십시오. 목록의 경우 O(n) 이상이어야합니다.

또한 동일한 책갈피를 두 번 추가하면 자동으로 이전 구성원이 대체되므로 중복을 피할 수 있습니다.

희망 하시겠습니까?

관련 문제