2017-05-22 4 views
1

Redis (및 https://quickleft.com/blog/how-to-create-and-expire-list-items-in-redis/ 참조)에서 정렬 된 항목 만료에 대한 제안이 있습니다. ZREMRANGEBYSCORE 및 ZREMRANGEBYRANK 명령이 실패 (아무것도 삭제되지 않음) 된 지형 공간 색인이 만료되도록 작업자 접근 방식을 시도했습니다.Redis에서 지리 공간 항목 만료

나는 ZREMRANGEBYLEX를 사용하여 결론을 맺었다.

문자열 이외의 지리 정보 항목으로 작업 할 수있는 방법이 있습니까?

업데이트 : 예를 들어

시간이 항목의 (TTL)을하는 경우 30 초입니다, 내가로 추가 : 이제

geoadd 1 -8.616021 41.154503 30 

, 가정하자 노동자가 40 초의 후 실행, I이었다 ,

zremrangebyscore 1 0 40 

일을 할 것이지만, 그렇지 않은 것을 기대

ZREMRANGEBYLEX 1 [0 [40 

않습니다. 왜 이런 행동입니까? 즉, 지형 공간 항목의 점수는 사전 편집 작업 만 지원합니까?

+0

Geoset은 정렬 된 집합이므로 모든 ZREM * 명령을 사용하여 요소를 제거 할 수 있습니다. 점수는 geohash를 사용하여 인코딩 된 좌표이므로 점수 및/또는 순위별로 제거하는 것이 가능하지만별로 의미가 없습니다. 너 뭐하려고? –

+0

안녕하세요, 만료 된 항목을 모두 제거하고 싶습니다. 그렇게하기 위해 회원 (점수)을 TTL (Time To Live) 값으로 사용합니다. 업데이트 된 질문을 참조하십시오. 감사. –

답변

1

정렬 된 집합은 요소 (문자열)를 가지며 모든 요소에는 점수 (부동 소수점)가 있습니다. Geoset은 점수를 사용하여 좌표를 인코딩합니다.

Redis는 정렬 된 집합 (또는 Geoset)의 구성원을 만료하지 않습니다. 필요할 경우 직접 제거해야합니다.

귀하의 경우, 두 개의 정렬 된 세트 - 하나는 GeoSet으로, 다른 하나는 점수로 TTL을 관리하기위한 것입니다.

는 예를 들어, 구성원을 추가하려면 '갑'이라고 가정하면

ZADD ttls 30 foo 
ZADD elems -8.616021 41.154503 foo 

수동 첫번째 ZRANGEBYSCORE ttls에 전화로 회원을 찾을 수 만료, 다음 두 세트에서 제거하십시오.

팁 : 초 대신 점수로 타임 스탬프를 사용하는 것이 좋습니다.