2009-04-08 15 views
7

Mam aplikację szyny, w której chciałbym używać pamięci podręcznej zarówno memcached, jak i pamięci podręcznej plików, do różnych celów.Jak korzystać z wielu pamięci podręcznych w szynach?

Chcę użyć pamięci podręcznej plików, aby zachować dużą liczbę stron, które nie zmieniają się często (niektóre w ogóle nie) - np. Buforowanie stron - i użyj memcached dla wszystkich innych rzeczy (akcja i buforowanie bazy danych itp.). Powodem jest to, że strony przechowywane w pamięci podręcznej magazynu plików będą prawdopodobnie wymagać dużej ilości pamięci, ale indywidualnie większość będzie dostępna rzadko.

Czy jest to możliwe do skonfigurowania memcached, ponieważ pamięć podręczna oznacza, że ​​jest on również używany do buforowania stron?

Jako drugie pytanie, w jaki sposób można bezpiecznie usunąć strony z pamięci podręcznej magazynu plików w jakiejś formie zadania cron, ponieważ nie ma opcji określenia ttl dla tej pamięci podręcznej. Na przykład polecenie Znajdź w systemie UNIX szybko odnajdzie i usunie wszystkie stare strony lub strony, które nie były dostępne od dłuższego czasu - jest to bezpieczne, ponieważ serwer aplikacji może potencjalnie spróbować wyświetlić jedną z tych stron w danym czasie (np. jest to bardzo mało prawdopodobne)? Jeśli nie, to jaki jest najlepszy sposób na zrobienie tego.

+0

Czy wiesz coś na temat korzystania z obu pamięci podręcznych? Chciałbym również to zrobić. Aktualnie uruchamiamy Rails 2.0.2, co moim zdaniem sprawia, że ​​jest to bardziej problematyczne ... – Chinasaur

+0

Tak, wygląda na to, że jest w porządku (i domyślnie) łączenie buforowania plików stron i (jeśli w ogóle konfigurujesz memcached) buforowanie reszty – frankodwyer

Odpowiedz

2

Jeśli chcesz używać systemu plików tylko do buforowania stron i memcached do buforowania akcji i fragmentów, wszystko jest w porządku. Buforowanie stron zawsze używa systemu plików. Pamiętaj tylko, że buforowanie stron omija Twoją aplikację Rails, więc nie możesz jej używać do stron zawierających zawartość, która zmienia się z użytkownika na użytkownika lub dla stron kontrolowanych przez filtr.

Jeśli chodzi o usuwanie stron, w systemie Unix plik można usunąć, ale nie jest on faktycznie usuwany z dysku, dopóki wszystkie otwarte uchwyty plików nie zostaną zamknięte. Jeśli serwer aplikacji otworzył plik, aby obsłużyć żądanie, a polecenie find usunie je w ułamku sekundy później, serwer aplikacji nagle nie otrzyma błędu podczas próby odczytu.

Można również rozważyć usunięcie plików w oparciu o ich ostatni czas dostępu, zamiast tworzenia lub modyfikacji, oraz użycie zamiatarki w aplikacji Rails w celu usunięcia strony z pamięci podręcznej, gdy jej zawartość jest nieaktualna.

2

Prostszym rozwiązaniem może być wykorzystanie pamięci podręcznej http przed aplikacją jako pamięci podręcznej stron, a nie dwóch sklepów w szynach. W ten sposób możesz używać nagłówków HTTP do kontrolowania zachowania pamięci podręcznej, w tym TTL. Te same ograniczenia będą miały zastosowanie również do lokalnych pamięci podręcznych przeglądarki jako miłej premii.

Varnish ma tak wysoką wydajność, jak to tylko możliwe, ale wymagałoby skonfigurowania innego ruchomego elementu w środowisku hostingowym jako proxy. To może być opłacalne w zależności od tego, co robisz.

Prostszym podejściem może być Rack::Cache, które będzie łatwe do skonfigurowania pod warunkiem, że korzystasz z szyny z obsługą szafy.

Powiązane problemy