Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Konfigurowanie redis, aby najpierw konsekwentnie eksmitować starsze dane

AFAIK, nie jest możliwe skonfigurowanie Redis, aby najpierw konsekwentnie eksmitować starsze dane.

Gdy opcje *-ttl lub *-lru są wybrane w maxmemory-policy, Redis nie używa dokładnego algorytmu do wybierania kluczy do usunięcia. Dokładny algorytm wymagałby dodatkowej listy (dla *-lru) lub dodatkowej sterty (dla *-ttl) w pamięci i odniesienia go do normalnej struktury danych słownika Redis. Byłoby to kosztowne pod względem zużycia pamięci.

Przy obecnym mechanizmie eksmisje występują w głównej pętli zdarzeń (tj. potencjalne eksmisje są sprawdzane przy każdej iteracji pętli przed wykonaniem każdego polecenia). Dopóki pamięć nie znajdzie się z powrotem w maksymalnym limicie pamięci, Redis losowo wybiera próbkę n kluczy i wybiera do wygaśnięcia najbardziej bezczynny (dla *-lru) lub ten, który jest najbliższy jego limitowi wygaśnięcia (dla *-ttl). Domyślnie brane są pod uwagę tylko 3 próbki. Wynik nie jest deterministyczny.

Jednym ze sposobów na zwiększenie dokładności tego algorytmu i złagodzenie problemu jest zwiększenie liczby rozważanych próbek (parametr maxmemory-samples w pliku konfiguracyjnym). Nie ustawiaj go zbyt wysoko, ponieważ będzie to zużywać trochę procesora. Jest to kompromis między dokładnością eksmisji a zużyciem procesora.

Teraz, jeśli naprawdę potrzebujesz spójnego zachowania, jednym z rozwiązań jest wdrożenie własnego mechanizmu eksmisji w oparciu o Redis. Na przykład, możesz dodać listę (dla kluczy nieaktualizowalnych) lub posortowany zestaw (dla kluczy aktualizowalnych) w celu śledzenia kluczy, które powinny być najpierw eksmitowane. Następnie dodajesz demona, którego celem jest okresowe sprawdzanie (za pomocą INFO) zużycia pamięci i wysyłanie zapytań o elementy listy/posortowanego zestawu w celu usunięcia odpowiednich kluczy.

Należy pamiętać, że inne systemy buforowania mają swój własny sposób radzenia sobie z tym problemem. Na przykład w przypadku memcached istnieje jedna struktura LRU na płytę (która zależy od rozmiaru obiektu), więc kolejność eksmisji również nie jest dokładna (chociaż w praktyce jest bardziej deterministyczna niż w przypadku Redis).




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Przechowywanie wartości hget redis w zmiennej w nodejs

  2. Seler tworzący nowe połączenie dla każdego zadania

  3. Czy możliwy jest nieblokujący Redis pubsub?

  4. Redis:Jak przeciąć normalny zestaw z posortowanym zestawem?

  5. Jak przetestować seler z django na komputerze z systemem Windows