Nie ma znaczenia dla buforowania, jeśli używasz widoków lub db_query (). Buforowanie działa zawsze tak samo, w jaki sposób dane są pobierane, gdy brakuje pamięci podręcznej, zależy wyłącznie od Ciebie.
- Zbuduj identyfikator pamięci podręcznej, aby zidentyfikować wpis w pamięci podręcznej. Może być prostym, zakodowanym ciągiem lub czymś złożonym na podstawie argumentów i tak dalej.
- Sprawdź, czy można załadować z pamięci podręcznej.
- Jeśli nie, odbuduj dane i umieść je w pamięci podręcznej z żądanym czasem wygaśnięcia.
Aby zobaczyć kilka przykładów, możesz spojrzeć na funkcje, które używają cache_get () , na przykład zmienna_initialize () .
Jeśli twoja funkcja jest wywoływana wiele razy, prawdopodobnie chcesz połączyć ją ze statyczną pamięcią podręczną, patrz na przykład archiver_get_info () . A jeśli odbudowywanie danych jest naprawdę powolne, możesz zapobiec temu wiele razy, używając struktury blokującej, jak robi to zmienna_initialize ().
Pamiętaj, że buforowanie pojedynczego zapytania ma sens tylko wtedy, gdy jest powolne, ponieważ cache_get () jest również zapytaniem db, chyba że użyjesz alternatywnego zaplecza pamięci podręcznej, takiego jak Memcache.
I wreszcie, widoki mają już wbudowane buforowanie i można je skonfigurować w widoku. To może być również opcja.
db_query()
, a konieczność buforowania wartości od$results->fetchAll()
i nie$results
jest kluczem do jej uruchomienia .Nie sądzę, że warstwa DB ma wbudowany mechanizm buforowania (choć mogę się mylić), ale możesz skorzystać z domyślnego interfejsu API pamięci podręcznej.
To tylko podstawowy przykład, który zbuforuje wyniki zapytania, aby uzyskać węzły określonego typu:
źródło
Oprócz standardowego mechanizmu cache_set / cache_get , który zapewnia Drupal, jeśli używasz MySQL jako bazy danych, możesz włączyć pamięć podręczną zapytań , która może buforować wyniki widoków lub dowolne inne zapytania do bazy danych, w sposób przezroczysty. mysqltuner może pomóc w ustaleniu dobrych wartości rozmiaru pamięci podręcznej.
Zauważ, że jeśli dużo piszesz do bazy danych, buforowanie zapytań staje się mniej skuteczne ze względu na sposób działania strategii unieważniania pamięci podręcznej (zapis do tabeli unieważnia wszystkie wpisy WYBIERAJĄCE OD LUB DOŁĄCZ do tej tabeli).
Istnieje również mechanizm buforowania PostgreSQL , ale nie mam z nim bezpośredniego doświadczenia.
źródło
Niedawno odkryłem moduł Akcje pamięci podręcznej . Za pomocą tego modułu możesz ustawić buforowanie widoku na pamięć podręczną uruchamianą przez reguły i utworzyć regułę unieważniania pamięci podręcznej na określonych widokach i ekranach widoków.
Na przykład pamięć podręczną widoku zawierającego listę węzłów określonego typu treści można opróżnić, gdy zostanie utworzony nowy węzeł tego typu treści.
źródło