2009-06-09 20 views
13

Memcached udostępnia opcję czasu wygaśnięcia pamięci podręcznej, która określa, jak długo obiekty są przechowywane w pamięci podręcznej. Zakładając, że wszystkie zapisy przechodzą przez pamięć podręczną, nie rozumiem, dlaczego ktoś chciałby usunąć obiekt z pamięci podręcznej. Innymi słowy, jeśli wszystkie operacje zapisu aktualizują pamięć podręczną przed DB, to pamięć podręczna nigdy nie może zawierać nieaktualnego obiektu, więc dlaczego go usunąć?memcached expiration time

Jednym z możliwych argumentów jest to, że pamięć podręczna wzrośnie w nieskończoność, jeśli obiekty nigdy nie zostaną usunięte, ale memcached pozwala określić maksymalny rozmiar. Po osiągnięciu tego rozmiaru memcached używa najmniej ostatnio używanego algorytmu (LRU) do określania elementów do usunięcia. Podsumowując, jeśli skonfigurowano rozsądny maksymalny rozmiar, a wszystkie zapisy przechodzą przez pamięć podręczną, dlaczego miałbyś chcieć wygasić obiekty po pewnym czasie?

Dzięki, Don

Odpowiedz

0

powiedziałbym, że chodzi o rozróżnienie między „najdawniej używany” i „nie będzie już używany” ... czy można wskazać jednoznacznie, które obiekty mogą być wyjęte z pamięć podręczną, która pozostawia więcej miejsca na obiekty, które mogą być później użyte.

+0

Czytałem, że czasami niewykorzystane klucze mogą zostać usunięte z pamięci podręcznej przed wygasłymi kluczami - jest to poświęcenie, aby zachować skuteczny algorytm oczyszczania pamięci podręcznej LRU. Innymi słowy, nie * nie jest * rozróżnienie między "Ostatnio używane" i "Nie będzie już używane". Klucze, których ważność wygasła, nie są faktycznie usuwane po wygaśnięciu ważności - ale * zostaną * wyczyszczone, gdy następnym razem otrzyma żądanie pobierania. Krótko mówiąc, ustawianie wygasania w rzeczywistości nie pomaga "zostawić więcej miejsca" na niewygasające klucze. –

14

Czasy przydatności do użycia są przydatne, gdy nie potrzebujesz dokładnych informacji, po prostu chcesz, aby były dokładne w określonym czasie. Więc przechowuj swoje dane w pamięci podręcznej przez (powiedzmy) pięć minut. Gdy dane są potrzebne, sprawdź pamięć podręczną. Jeśli tam jest, użyj go. Jeśli nie (ponieważ wygasł), przejdź do obliczenia wartości od nowa.

Niektóre buforowane wartości są oparte na dużym zestawie danych, a unieważnienie pamięci podręcznej lub zapisanie do niej nowych wartości jest niepraktyczne. Jest to często prawdziwe w przypadku danych zbiorczych lub danych wyliczonych z dużego zestawu oryginalnych danych.

3

Jednym z przypadków byłby przypadek, w którym wartość jest ważna tylko przez określony czas.

+1

Podsumowując ruch w witrynie lub sprzedaż, którą mieliśmy w ciągu ostatnich 3 godzin. Ustaw swój czas wygaśnięcia memcache na 3 godziny i włącz go automatycznie, gdy nie znajdziesz go w pamięci podręcznej i nie musisz się martwić o czas w kodzie. A może to tymczasowe hasło lub żeton jakiegoś rodzaju. (Dobry punkt za obiektami, ale czułem, że może użyć niektórych przykładów.) –

3

Niektóre dane w pamięci podręcznej jest drogie, aby utworzyć ale małe (powinno trwać długo), a niektóre są duże, ale stosunkowo tanie (powinien trwać krócej)

Również dla większości zastosowań trudno jest dokonać memcached działa jak zapis poprzez pamięć podręczną. Trudno właściwie unieważnić wszystkie pamięci podręczne, szczególnie te renderowanych stron. Większość użytkowników będzie tęsknić za parą.

12

Sam byłem tym zainteresowany, kiedy po raz pierwszy zacząłem pracować z memcached. Poprosiliśmy znajomych, którzy pracowali na hi5 i facebooku (obaj ciężcy użytkownicy memcached).

Obaj powiedzieli, że zazwyczaj używają czegoś takiego jak 3-godzinny domyślny czas wygaśnięcia jako "na wszelki wypadek".

  1. Dla większości przedmiotów, to nie jest takie drogie, aby odbudować je co 3 godziny
  2. Na off szansa masz trochę błąd, który powoduje, że rzeczy, które powinny pozostać w pamięci podręcznej nie inaczej, to może was ustrzec od wpadnięcie w zbyt duże kłopoty

Więc zgaduję odpowiedź na pytanie "Dlaczego?" jest naprawdę "Dlaczego nie?". To nie kosztuje wiele, aby mieć tam wygasanie, a to prawdopodobnie tylko zapewni, że nie przechowujesz nieaktualnych danych w pamięci podręcznej.

0

Jeśli twój projekt wymaga pamięci podręcznej z zapisywaniem, nadal masz problem z przekroczeniem limitu pamięci przydzielonego memcached, czyli miejsca, w którym LRU wchodzi w grę.

LRU ma dwie zasady przy ustalaniu co kopać, i czyni to w następującej kolejności:

  1. minął płyty
  2. Starsze nieużywane płyty

świadczy różne daty ważności dla różnych grup obiektów może pomóc w utrzymywaniu danych, które są często niedostępne, a które są droższe w pamięci podręcznej, a jednocześnie pozwalają na łatwiejsze ponowne tworzenie i wygaszenie używanych tablic, które mogą znaleźć się na końcu kolejki.

Jest również tak, że wiele kluczy pamięci podręcznej kończy się stając się agregatami innych obiektów, i jeśli nie użyjesz hash wyszukiwania dla tych obiektów, znacznie łatwiej jest po prostu pozwolić obiektom wygasnąć po kilku godzinach niż aktywnie aktualizować wszystkie powiązane klucze, a także zachowuje współczynnik trafień/miss, o który skutecznie walczysz, używając memcached w pierwszej kolejności.

0

Istnieje kilka powodów:

  1. przechowywanie danych nie jest trwała między ponownym uruchomieniu serwera. Po ponownym uruchomieniu lub ponownym załadowaniu serwera buforowania konieczne będzie ponowne wygenerowanie dużych danych w pamięci podręcznej.
  2. Mogą wystąpić przypadki, gdy użytkownik nie zostanie powiadomiony o aktualizacji obiektu. na przykład. Dane użytkownika zwrócone przez interfejsy API.
  3. Wyszukiwanie obiektu. SQL zapewnia używanie tych samych danych do generowania różnych wyników w zależności od wymagań, takich jak ostatnie i najczęściej głosowane itp. Będziesz musiał użyć różnych kluczy pamięci podręcznej do przechowywania danych dla takich różnych wyników (duplikacja danych, ból głowy, aby zaktualizować wszystkie odpowiednie klucze, nawet jeśli pojedyncze wspólne zmiany danych). Również z serwerem baz danych masz większą elastyczność w przeglądaniu danych (niestandardowe statystyki itp.).
1

myślimy o tym samym i to, co jest na memcached wiki „Nawet jeśli aktywnie usunięcie lub nadpisanie danych z pamięci podręcznej, to nadal chcesz mieć cache wygaśnie sporadycznie. W przypadku, gdy aplikacja zawiera błąd, awarię, blip sieciowy lub inny problem, w którym pamięć podręczna może być zsynchronizowana. "

Ma to sens, ponieważ nie możemy planować ruchów sieciowych i staje się ważne, jeśli wydamy kod każdego dnia lub 2 lub tydzień. jedna myśl, jaką mamy, polega na ponownym uruchomieniu serwera memcached w każdym wydaniu, ale stanie się to naprawdę bolesne, jeśli będzie 10 lub więcej memcached serwerów. Najprostszą rzeczą, jaką uważam, jest ustawienie terminu wygaśnięcia na obiektach.