2011-10-27 3 views
4

나는 방금 redis를 시작했으며 noSql을 사용하여 첫 번째 걸림돌을 쳤습니다. 이전에 내가 아는 모든 SQL 서버입니다.redis에서 최신 세트/해시 가져 오기

모든 것이 핵심 가치라는 원칙을 이해합니다. 하지만 예를 들어 순서와 그 작업 수행 방법 :

해시 세트 사용 :

이제
HMSET users:1 firstname 'james' lastname 'smith' created 'datetime.datatime.now' 

나는 당신이이 경우에 (해시 세트의 길이를 얻을 것입니다 두 번째 레코드를 추가하는 가정을 우리 다음 다른 행 최신 기록을 얻을 것 어떻게

HMSET users:x firstname 'john' lastname 'smith' created 'datetime.datatime.now' 

추가) 1 'X'값을 돌려 그 말을 할까? 날짜별로? 아니면 '해쉬 셋 중 -1에서 레코드를 얻으시겠습니까?'라고 말할 수 있습니까?

아마도 정렬 된 세트가 더 적절한 경우 해시 세트를 사용하겠다고 제안하고 있습니까?

그 당신은 SORT 명령을 확인하는 것이 좋습니다

답변

2

중요한 경우 내가 파이썬을 사용하고 있습니다.

에포크 타임에 저장된 타임 스탬프를 정렬하여 정렬 할 수 있습니다.

> HMSET users:1 firstname 'john' lastname 'smith' created 1319729878 
"OK" 
> HMSET users:2 firstname 'Jane' lastname 'Forbes' created 1319729910 
"OK" 
> sadd users 1 
true 
> sadd users 2 
true 
> sort users get users:*->firstname by users:*->created 
["john","Jane"] 
> sort users get users:*->firstname by users:*->created desc 
["Jane","john"] 

원하는 경우 여러 키를 얻을 수 있습니다. SORT는 대부분의 옵션이있는 명령 일 가능성이 있으므로 문서를 살펴보십시오.

키에 대해 가능한 재사용 (delete, count + 1, insert는 키를 다시 사용하겠습니까?)에 대해 신중하게 생각해야합니다. 따라서 프로젝트의 관계형 데이터베이스에서 키를 가져옵니다.

+0

'O (N + M * log (M))'에서 여전히 제한이 1 인'SORT'가 실행됩니까? –

+0

'M = 1'과'log (1) == 0 '때문에'O (N)'이라고 생각합니다. – Niloct

0

집합에 추가 할 때 정렬 된 사용자 ID 집합을 사용해야하며 사용자 ID와 타임 스탬프를 점수로 추가해야합니다.

그런 다음 zrevrange와 같은 것을 사용하여 오름차순 또는 내림차순으로 끌어낼 수 있습니다.이 값을 1 레코드로 제한하여 최신 값을 얻으십시오.

그러면 해시에서 모든 값을 가져올 수 있습니다.

관련 문제