Czy w Redis można ustawić TTL (czas życia) nie dla określonego klucza, ale dla członka dla zestawu?TTL dla zestawu elementów
Używam struktury dla znaczników proponowanych w dokumentacji Redis - dane są prostymi parami klucz-wartość, a znaczniki są zestawami zawierającymi klucze odpowiadające każdemu znacznikowi, np.
> SETEX id:id_1 100 'Lorem ipsum'
OK
> SADD tag:tag_1 id:id_1
(integer) 1
Kluczem id:id_1
wygasają zgodnie z oczekiwaniami, ale nie widzę skuteczny sposób, aby usunąć odpowiedni element ze zbioru tag:tag_1
.
Jednym ze sposobów, w jaki wpadłem, jest użycie zadania cron zawierającego skrypt, który okresowo usuwa wygasłe klucze z zestawów - przez dodanie wszystkich nazw znaczników do innego zestawu, a następnie iterowanie po wszystkich znacznikach, następnie wszystkie identyfikatory odpowiadające każdemu z nich. tag i sprawdzenie, czy odpowiedni klucz istnieje - jeśli nie, wywołanie SREM
.
Nie sądzę, że będzie to skuteczny sposób i prawdopodobnie chciałbym zachować tagi tak czyste, jak to możliwe, ponieważ rozmiar zestawów prawdopodobnie wpłynie na wydajność wyszukiwania przez wiele znaczników (SINTER
). Czy istnieje bardziej "wewnętrzny" sposób?
Tak, to przyzwoity sposób i prawdopodobnie poradzę sobie z tym problemem z czymś podobnym. Ponieważ istnienie wygasłych członków w zestawach znaczników nie stanowi problemu w żaden inny sposób niż wydajność, najprawdopodobniej użyję okresowo uruchamianego programu cron istead - aby ograniczyć ankiety do wystarczającego minimum. – Przemek