복붙노트

[REDIS] 세트 구성원에 대한 TTL

REDIS

세트 구성원에 대한 TTL

그렇지 특정 키 (라이브에 시간) 설정 TTL로 레디 스에서 가능하지만 세트의 멤버?

I는 레디 스 문서 제안한 태그 구조를 사용하고 - 데이터는 단순한 키 - 값 쌍이며, 태그는 예를 들어, 각 태그에 대응하는 키를 포함하는 세트이다

> SETEX id:id_1 100 'Lorem ipsum'
OK
> SADD tag:tag_1 id:id_1
(integer) 1

키 ID는 예상대로 ID_1 만료됩니다하지만 난 태그에서 해당 멤버 제거하는 효율적인 방법이 표시되지 않습니다 : Tag_1입니다 세트를.

한 가지 방법은 내가 정기적으로 집합에서 만료 된 키를 제거 할 스크립트가 포함 된 크론 작업 사용 와서 - 태그를 다른 세트에 모든 태그 이름을 추가하고 모든 통해 반복에 의해를, 모든 ID는 각 태그에 대응하는 경우 확인 스렘를 호출하지 않을 경우 - 키를 해당하는 존재한다.

나는 그것이 효율적인 방법이 될 것이라고 생각하지 않고 세트의 크기가 아마 여러 개의 태그 (소결)에 의해 검색의 성능에 영향을 미칠 것이기 때문에 나는 아마도처럼, 가능한 한 깨끗한로 태그를 유지하는 것입니다. 더 "내부"방법이 있나요?

해결법

  1. ==============================

    1.직접 목록, 세트, ​​또는 zsets에서 항목을 만료 할 수 없습니다.

    직접 목록, 세트, ​​또는 zsets에서 항목을 만료 할 수 없습니다.

    당신은 당신이 따라 해당 세트를 유지할 수 있도록하는 것이 마스터 항목이 만료 될 때 통지하는 메커니즘을 구현해야합니다.

    이 질문에 대한 답변을 참조하십시오, 나는 (태그에 의한 ID로 세션 및 사용자 교체)가 사용 사례에 적용 생각 :

    레디 스, 세션 만료 및 역방향 조회

  2. ==============================

    2.아니, 이건 수 없습니다 (그리고 중 하나를 계획하지). 권장되는 접근 방식은 점수 타임 스탬프로 설정 한 후 수동으로 만료 된 키 제거와 정렬 된 세트를 사용하는 것입니다. 만료되지 않은 키에 대한 질문에, 당신이 만료 된 키를 삭제하려면 지금 + inf를 ZRANGEBYSCORE $를 사용할 수 ZREMRANGEBYSCORE -inf은 $ 지금 트릭을 할 것입니다.

    아니, 이건 수 없습니다 (그리고 중 하나를 계획하지). 권장되는 접근 방식은 점수 타임 스탬프로 설정 한 후 수동으로 만료 된 키 제거와 정렬 된 세트를 사용하는 것입니다. 만료되지 않은 키에 대한 질문에, 당신이 만료 된 키를 삭제하려면 지금 + inf를 ZRANGEBYSCORE $를 사용할 수 ZREMRANGEBYSCORE -inf은 $ 지금 트릭을 할 것입니다.

    내 응용 프로그램에서 나는 단순히 두 명령을 나는 세트를 조회 할 때마다 실행합니다. 나는 또한 결국 사용되지 않는 집합을 제거하는 세트 자체에 (긴) 만료 시간이 결합되어 있습니다.

    이 문서에서는 더 자세히 그것을 통해 안내합니다.

  3. ==============================

    3.직접 목록에서 항목을 만료되지 수 있지만, 그것은 당신의 레디 스 서버에서 루아 스크립트를 등록하고 레디 스에이 기능을 추가 할 수 있습니다. 값을 기준으로 레디 스 만료

    직접 목록에서 항목을 만료되지 수 있지만, 그것은 당신의 레디 스 서버에서 루아 스크립트를 등록하고 레디 스에이 기능을 추가 할 수 있습니다. 값을 기준으로 레디 스 만료

  4. from https://stackoverflow.com/questions/17060672/ttl-for-a-set-member by cc-by-sa and MIT license