Redis : 배열 또는 정렬 된 집합의 요소를 만료 할 수 있습니까?


124

현재 전체 키 / 값 쌍만 만료 될 수 있습니까? 목록 유형 구조에 값을 추가하고 삽입 후 1 시간 후에 자동으로 제거되도록하려면 어떻게해야합니까? 현재 가능합니까, 아니면 수동으로 제거를 수행하려면 크론 작업을 실행해야합니까?

답변:


76

현재 전체 키 / 값 쌍만 만료 될 수 있습니까?

내가 아는 한, 그리고 만료 에 대한 주요 명령 및 문서에 따르면 현재 만료를 기본 데이터 구조가 아닌 특정 키에만 설정할 수 있습니다. 그러나 설명 된 대체 솔루션과 함께이 기능에 대한 Google 그룹에 대한 토론 이 있습니다.


1
2016 년 7 월 현재 새로운 버전에서 지원 한 아이디어가 있습니까?
Kamran Shahid

1
@KamranShahid 이것에 대해 뭔가있어 ??
Prakash Kumar

1
Nop Prakash는 아직 없습니다.
Kamran Shahid

3
이 답변은 8 년 후에도 여전히 관련이 있습니까?
simo

2
네, 중첩 된 데이터 구조의 요소 만료는 Redis에서 지원되지 않습니다.
Itamar Haber

94

이 문제를 아주 잘 해결하는 일반적인 패턴이 있습니다.

정렬 된 세트를 사용하고 타임 스탬프를 점수로 사용합니다. 그런 다음 점수 범위별로 항목을 삭제하는 것은 간단합니다. 주기적으로 또는 모든 쓰기에 대해서만 수행 할 수 있으며, 읽기는 항상 범위를 벗어난 요소를 무시하고 점수 범위 만 읽습니다.

추가 정보 : https://groups.google.com/forum/#!topic/redis-db/rXXMCLNkNSs


7
좋은 해결책이지만 redis가 이것을 제대로 지원하기를 바랍니다. 일반적인 요구 사항이며 복잡한 해결 방법이 필요하지 않습니다.
UpTheCreek 2015

14
잘 모르겠습니다. 그들이 원치 않거나 계획하지 않는 방식으로 기능 세트를 확장하는 것은 디자인을 희생하는 것을 의미합니다. 우수, 완벽한 솔루션 등의 최고 음에 추가 기능을 구축하고, 잎은 레디 스 그것이 무엇을 할
Kieren 존스톤

우수의 preformance보다 더 많은 결과가 단순하고 깨끗한 디자인과 예측 가능한 행동 - 그대로 레디 스 완벽
let4be

1
멋진 솔루션은 간단한 fifo 목록을 사용하여 목록을 유지하고 처음 5 개 요소 만 가져와 확장성에 따라 목록이 5 + N 이상으로 커지면 키를 삭제하고 다시 시작할 수있었습니다. 간단하고 쉽고 정확하게 Redis 알고리즘이 있어야합니다. 이 알고리즘은보고 시스템이 목록을 쿼리하고 사용자가 로그인 한 장치를 볼 수있는 충분한 시간을 제공합니다. @KierenJohnstone에 동의하면 Redis는 주변에 아키텍처를 생성하도록 설계되었으며 완벽합니다.
Ligemer

1

나는 이것을 처리하는 다른 방법을 찾았습니다. 이것이 여러분에게 도움이되는지 모르겠지만 여기에 있습니다.

해시와 정렬 된 집합은 GUID로 연결됩니다.

  1. 'x'초 후에 만료되도록 설정된 해시가 있습니다.
  2. 범위가 지정된 쿼리에 사용되는 정렬 된 집합이 있습니다.
  3. 둘 다에 대한 데이터가 트랜잭션에 추가되므로 하나가 실패하면 둘 다 실패합니다.
  4. 범위가 지정된 쿼리에서 'EXISTS'를 사용하여 결과가 반복 될 때 해시 된 값이 있는지 확인합니다.
  5. 존재하지 않는 경우 만료 된 것이므로 정렬 된 세트에서 항목을 삭제하십시오.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.