2013-05-13 12 views
11

Chcę usunąć wszystkie klucze starsze niż 3 miesiące. Klucze te nie zostały ustawione z datą wygaśnięcia.Redis: Jak usunąć wszystkie klucze starsze niż 3 miesiące

A jeśli to nie jest możliwe, czy mogę usunąć najstarsze 1000 kluczy?

+0

Niestety, to nie jest możliwe. Ale możesz usunąć klucze Redis zgodnie z powiązanymi z nimi danymi. –

+0

@LeonidBeschastny Dzięki. Czy to dlatego, że klucze nie są przechowywane w sposób posortowany lub zapisane z datą? – Christoffer

+3

Nie można uzyskać czasu utworzenia kluczy, chyba że przechowujesz go w powiązanych z nim danych. Jeśli chodzi o najstarsze klucze, Redis jest zoptymalizowany pod kątem szybkiego dostępu do wartości klucz-wartość, więc przechowuje swoje dane jako tablicę skrótów. –

Odpowiedz

5

Niestety, nie jest to możliwe, jak podano w komentarzach powyżej. W Redis ważne jest tworzenie własnych indeksów, aby wspierać wzorce dostępu.

Wskazówka: Co należy zrobić, to stworzyć zestaw (posortowane ZADD) z wszystkich nowych lub zmodyfikowanych kluczy i ustawić wynik do datownik. W ten sposób możesz z łatwością pobrać klucze w określonym czasie, używając ZRANGEBYSCORE.

Jeśli chcesz wygasić istniejące klucze, get all keys (drogie) i ustawić wartość TTL dla każdego przy użyciu polecenia EXPIRE.

4

Trochę za późno, ale sprawdź polecenie OBJECT. Tam znajdziesz czas bezczynności obiektu (z rozdzielczością 10 sekund). Jest używany do celów debugowania, ale nadal może być dobrym obejściem dla twoich potrzeb.

Referencje: http://redis.io/commands/object

+0

Czy jest jakiś sposób wykonania tego polecenia z StackExchange.Redis.Extention Api? –

6

Are you TERAZ stosując wygaśnie? Jeśli tak, możesz przełączyć wszystkie klawisze, jeśli nie ustawiono TTL, a następnie dodać.

Python przykład:

for key in redis.keys('*'): 
    if redis.ttl(key) == -1: 
     redis.expire(key, 60 * 60 * 24 * 7) 
     # This would clear them out in a week 

EDIT Jak @kouton wskazał stosowanie skanowania na klucze w produkcji, zobaczyć dyskusję na ten temat w: SCAN vs KEYS performance in Redis

+2

Nigdy nie używaj "kluczy" w produkcji; zamiast tego użyj 'scan'. – kouton

Powiązane problemy