2014-07-20 3 views
4

각 키마다 다른 TTL 값을 저장해야합니다.Redis - 정규식과 일치하는 키의 값을 얻습니다.

예 - val1과 (만료 시간 : 10) - XXXX, 값, 을 val2 (만료 시간 : 20)

옵션 1 : 내 가장 좋은 방법이 될 수있다 : 사용 해쉬/회원 당 만료와 함께 설정합니다.

불행하게도 Redis의 containers (목록, 해시, 세트 및 정렬 집합)은 이전에 여러 번 요청되었지만 구성원 당 만료를 지원하지 않습니다.

옵션 2 : 그래서 나는 이런 식으로 뭔가를해야했다 :

SETEX의 XXXX : 0 10 val1과

SETEX의 XXXX : 1 ~ 20을 val2

자, 만료되지 않은 키를 XXXX로 시작하는 모든 값을 가져 오려고합니다.

그래서 나는 노력이 :

127.0.0.1:6379> keys XXXX:* 
1) "XXXX:0" 
2) "XXXX:1" 

하지만이 이 아닌 를 얻을 싶어!

옵션 3 : 차라리 키에 값을 넣는 것보다 그것을 할 수있는 방법 :

SETEX XXXX:val1 10 val1 
SETEX XXXX:val2 20 val2 

127.0.0.1:6379> keys XXXX:* 
1) "XXXX:val1" 
2) "XXXX:val2" 

그것은 내 마지막 옵션이 될 것입니다 .. 나는 : 후 문자열을해야합니다 ..

옵션 1 (대체)을 구현하는 방법이나 더 나은 방법을 사용하여 적어도 옵션 2를 구현하는 방법은 무엇입니까?

+0

제한 사항은 단일 명령으로 수행해야한다는 것입니다. – Jahaja

+0

예. 키가 많아서 각 키별로 값을 얻고 싶지 않습니다. 성능 문제가 될 수 있습니다. – user2503775

+0

이를 달성 할 수있는 방법이 있어야합니다. – user2503775

답변

1

하나의 명령을 사용하려면 키의 만료를 처리해야합니다.

XXXX가 요소 목록이라고 가정하고, 구성원의 점수로 만료일이 만료 된 정렬 된 집합에 키를 저장하는 경우의 예를 가정합니다.

ZADD XXXX [current-timestamp + 10] val1 
ZADD XXXX [current-timestamp + 20] val2 

그리고 이런 식으로 그들을 가져 오는 :

ZREVRANGEBYSCORE XXXX +inf [current-timestamp] 

것은 당신이 정기적으로 만료 된 요소를 제거 할 것이다 그러나 :

ZREMRANGEBYSCORE XXXX -inf [current-timestamp] 
+0

감사. 이전에이 옵션을 보았지만 REDIS가 나를 대신하도록하는 것이 더 좋습니다. 다른 선택을 찾으십시오. – user2503775

0

옵션 1이 옵션을 선택하지 않습니다, 당신이 언급 한대로 당신 자신.

옵션 3은 매우 낭비합니다. 값으로 한 번, 키 이름에 한 번 각 값을 두 번 저장하게됩니다.

성능상의 이유로 KEYS 대신 SCAN을 사용하는 것이 좋습니다. 옵션 2를 선택하는 것이 가장 좋은 방법입니다. 각 키 이름에 대해 GET을 수행하여 그 값을 얻으십시오.

또는 옵션 4를 사용하면 키 이름을 사용하여 목록/세트를 구성하고 SORT...GET을 사용하여 값만 검색 할 수 있습니다. 이렇게하면 값만 얻을 수 있지만 개인적으로이 방법은 # 2에 비해 구현하기가 더 복잡합니다. 목록에서 만료 된 키를 제거하거나 주기적으로 설정하고 사전 설정하는 것이 좋습니다.