programing

세트 멤버의 TTL

javaba 2021. 1. 15. 19:10
반응형

세트 멤버의 TTL


Redis에서 특정 키가 아니라 세트의 멤버에 대해 TTL (Time to Live)을 설정할 수 있습니까?

Redis 문서에서 제안한 태그 구조를 사용하고 있습니다. 데이터는 간단한 키-값 쌍이고 태그는 각 태그에 해당하는 키를 포함하는 세트입니다.

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

id:id_1는 예상대로 만료되지만 tag:tag_1세트 에서 해당 멤버를 제거하는 효율적인 방법이 보이지 않습니다 .

한 가지 방법은 세트에서 만료 된 키를 주기적으로 제거하는 스크립트가 포함 된 크론 작업을 사용하는 것입니다. 모든 태그 이름을 다른 세트에 추가 한 다음 모든 태그를 반복 한 다음 각 태그에 해당하는 모든 ID를 확인하고 해당 키가 존재합니다 SREM. 그렇지 않은 경우 .

나는 그것이 효율적인 방법이라고 생각하지 않으며 가능한 한 태그를 깨끗하게 유지하고 싶습니다. 세트의 크기가 여러 태그 ( SINTER) 로 검색하는 성능에 영향을 미칠 수 있기 때문 입니다. 더 "내부적 인"방법이 있습니까?


목록, 집합 또는 zset의 항목을 직접 만료 할 수 없습니다.

마스터 항목이 만료 될 때 알림을받을 메커니즘을 구현해야 그에 따라 해당 세트를 유지할 수 있습니다.

이 질문에 대한 답변을 참조하십시오. 사용 사례에 적용되는 것으로 생각합니다 (세션을 ID로, 사용자를 태그로 교체).

Redis, 세션 만료 및 역방향 조회


아니요, 가능 하지 않습니다 (계획되지도 않음 ). 권장되는 접근 방식은 점수 타임 스탬프로 설정 한 후 수동으로 만료 된 키 제거와 정렬 된 세트를 사용하는 것입니다. 만료되지 않은 키를 쿼리하려면을 사용 ZRANGEBYSCORE $now +inf하여 만료 된 키를 삭제하면 ZREMRANGEBYSCORE -inf $now됩니다.

내 응용 프로그램에서는 집합을 쿼리 할 때마다 두 명령을 모두 실행합니다. 또한 이것을 세트 자체의 (긴) 만료 시간과 결합하여 결국 사용하지 않는 세트를 제거합니다.

이 기사에서는 더 자세히 설명합니다.


목록의 항목을 직접 만료 할 수는 없지만 redis 서버에 lua 스크립트를 등록하고이 기능을 redis에 추가 할 수 있습니다. 가치에 따른 Redis 만료

참조 URL : https://stackoverflow.com/questions/17060672/ttl-for-a-set-member

반응형