Chciałbym wiedzieć, jakie byłoby lepsze podejście do unieważnienia / aktualizacji obiektów pamięci podręcznej.
Wymagania wstępne
- Posiadanie zdalnego serwera memcached (służącego jako pamięć podręczna dla wielu aplikacji)
- Wszystkie serwery są hostowane przez lazur (regiony koligacji, te same centra danych)
- Rozmiar obiektu pamięci podręcznej wynosi od 200 bajtów do 50 kilobajtów
Podejście 1 (zapisz w pamięci podręcznej jak najszybciej)
- Obiekt A jest tworzony -> przechowuj w bazie danych i przechowuj w pamięci podręcznej
- Obiekt A żądany przez klienta -> sprawdź, czy pamięć podręczna istnieje, w przeciwnym razie pobierz z bazy danych i zapisz w pamięci podręcznej
- Obiekt A zostanie zaktualizowany -> przechowuj w bazie danych, przechowuj w pamięci podręcznej
Podejście 1 wydaje się prostsze. Jeśli coś zostanie utworzone, umieść w pamięci podręcznej jak najszybciej. Niezależnie od tego ktoś będzie tego potrzebował.
Podejście 2 (leniwy sklep z pamięcią podręczną)
- Obiekt A jest tworzony -> przechowuj w bazie danych
- Obiekt A żądany przez klienta -> sprawdź, czy pamięć podręczna istnieje, w przeciwnym razie pobierz z bazy danych i zapisz w pamięci podręcznej
- Obiekt A zostanie zaktualizowany -> zapisz w bazie danych, usuń klucz w pamięci podręcznej
Podejście 2 wydaje się bardziej świadome pamięci. W tym podejściu tylko żądane elementy trafiają do pamięci podręcznej.
Pytanie 1: Jakie podejście byłoby lepsze w kontekście wydajności? Pamięć ani procesor jeszcze się nie liczą.
Pytanie 2: Czy moje myśli są rodzajem przedwczesnej optymalizacji?
Pytanie 3: Jakieś inne przemyślenia? Inne podejścia?
performance
azure
memcached
caching
lurkerbelow
źródło
źródło
memcached zarządza obiektami z własnymi zasadami, który buforowany obiekt wygasłby, gdyby nikt nie miał do niego dostępu lub w pamięci zabrakło pamięci. Dlatego twoje pierwsze podejście nie jest dobrym pomysłem, ponieważ twój obiekt w memcached wciąż byłby unieważniany z powodu braku pamięci podczas tworzenia obiektów.
Pytanie 1 Podejście 2 byłoby lepsze pod względem wydajności, ponieważ nie wysyła obiektu do pamięci memcache, chociaż poprawa wydajności jest bardzo niewielka.
Q2 Trudno powiedzieć. Załóżmy, że znasz wąskie gardło i opracuj podejście, które nie byłoby przedwczesne.
Pytanie 3 Istnieją inne podejścia, takie jak pamięć podręczna tylko w pamięci podręcznej.
źródło