2013-08-15 5 views
0

에서 시간을 기준으로 모든 키를 취득하거나 사전 내에있는 연대기 키, 즉 기반으로 :내가 레디 스에서 시간에 따라 키의 목록을 어떻게 레디 스

get foo 
{"time":'Thu Aug 15 22:37:37 2013', "data":"etc"} 

그리고 나는이 내 Redis 항목마다 "time" 키가 있습니다. 그 시간에 기초하여 정렬 된 목록을 가져 오는 방법, 또는 더 나은 방법으로 키가 작성된 시간을 가져올 수 있습니까?

+0

당신은 할 수 없습니다. 시간 집합 데이터 구조를 인덱싱하기 위해 zset을 빌드해야합니다. –

답변

1

Redis는 키 저장소이므로 시도하는 동안 작동하지 않아야합니다. 'time'키는 Redis 문자열과 관련이 없습니다 (올바르게 이해하는 경우).이 문자열은 Redis 문자열에 저장된 JSON 문자열 일뿐입니다. 기본적으로 Redis는 문자열에 무엇이 있는지 신경 쓰지 않으며, 그렇다면 전체 SQL DB가 될 수도 있습니다.

절대적으로 시간을 사용해야하는 경우 키 이름에이를 포함시킬 수 있습니다. 예를 들어, 8 월에 모든 키를 가져 오려고합니다.

redis 127.0.0.1:6379> MSET foo_20130815223737 "{\"time\":'Thu Aug 15 22:37:37 2013', \"data\":\"etc\"}" foo_20130816123015 "{\"time\":'Thu Aug 16 12:30:15 2013', \"data\":\"etc\"}" 
OK 
redis 127.0.0.1:6379> KEYS foo_201308* 
1) "foo_20130815223737" 
2) "foo_20130816123015" 

이렇게하려는 이유를 설명하면 더 나은 옵션이있을 수 있습니다. 예를 들어 Redis를 메시지 대기열로 사용하는 Pub/Sub는 사용자의 의도에 더 잘 부합 할 수 있습니다.

+1

불량한 조언. 제안 된 방식으로 KEYS 명령을 사용하지 마십시오. O (n) 복잡성 때문에 많은 수의 키가있을 때 작동하지 않습니다. –

+0

@DidierSpezia 충분히 좋았지 만, Redis를 사용하여 자신의 특정 요구 사항을 충족시킬 수있는 유일한 해결책이었습니다. –

+0

해당 데이터베이스 내에 페이지 (사용자 생성)가 있고 작성 시간과 관련하여 이들을 모두 나열해야하므로 데이터베이스의 모든 키를 나열하려고합니다. – knight

0

는 소트 세트를 사용 : 나는 비슷한 대답 here을 준 교장은 동일합니다 :