Tysiące użytkowników, miliony zapytań HTTP, miliardy odwołań do bazy danych, dziesiątki tysięcy osobogodzin inwestowanych przez firmy na optymalizacje aplikacji webowych, miliony dolarów (czy też euro) wydawanych na infrastrukturę, wszystko to po aby nasz system zapewniał użytkownikom odpowiedni komfort pracy i zadowalający czas odpowiedzi.
I gdy już wszystkie optymalizacje zapytań do bazy danych zostaną zastosowane, indeksy wypolerowane na wysoki połysk, czasowa złożoność obliczeniowa wszystkich metod będzie dążyć do O(1), a system dalej nie będzie spełnił wyśrubowanych warunków SLA, zawsze pozostaje wyprawa na "ostatni przylądek dobrej nadziei", czyli pełne niebezpieczeństw i ekscytujących przygód krainy, gdzie wasze dane będą na was czekać w ultra wydajnych, skalowalnych i stabilnych serwerach cache.
Chciałbym was, drodzy słuchacze, łagodnie wprowadzić w świat cache. Cache dla aplikacji webowych, opowiedzieć o stosowanych topologiach, wykorzystaniach cache w poszczególnych warstwach aplikacji, świat algorytmów "cache eviction", rozproszonych serwerów cache (i "data grids") oraz znanych i też przemilczanych "sekretów" i problemów, z którymi się spotkacie podczas implementacji cache w waszym systemie. Wszystko z wykorzystaniem takich rozwiązań jak memcached, redis, infinispan i ehcache.
18. Sytuacja gdy założony rozmiar cache
został przekroczony i niektóry elementy
(pary klucz wartość) zostają z niego
usunięte. W celu wyboru elementów,
które zostaną usunięte wykorzystywane
są różne algorytmy, takie jak LRU lub LFU
24. Sytuacja gdy pewne elementy cache (pary
klucz-wartość), nie są już dłużej aktualne,
zostały usunięte lub też do danego klucza
została przypisana nowa wartość. Pojęcie
ważne dla rozproszonych cache, gdyż
tego typu zdarzenia powinny być
rozgłoszone do wszystkich węzłów cache
25. There are only two hard things in
Computer Science: cache invalidation and
naming things.
-- Phil Karlton
33. Sytuacja gdy danemu elementowi cache
(para klucz wartość), został przypisany
czas przez jaki ten element będzie
dostępny w cache. Po tym czasie element
jest usuwany z cache. Dosyć często „cache
expiry” definiowany przez dwa
parametry „TTL” i „idle time”
35. Sytuacja gdy rozmiar cache został
przekroczony, i wybrane element cache
zostają zapisane na dysku lub do bazy
danych. Są one nadal dostępne w cache,
jednak dostęp do nich jest wolniejszy.
Wykorzystywane są w tym przypadku
podobne algorytmy jak podczas „cache
eviction”
42. root@ubuntu:/home/ubuntu# telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
set klucz 0 600 6
123456
STORED
get klucz
VALUE klucz 0 6
123456
END
delete klucz
DELETED
108. @Cacheable(value="books", key="isbn.rawNumber")
public Book findBook(ISBN isbn, boolean checkWarehouse,
boolean includeUsed)
@Cacheable(value="books", condition="name.length < 32",
unless="result.hardback")
public Book findBook(String name)