Відповіді:
Не має значення для кешування, якщо ви використовуєте представлення або db_query (). Кешування працює завжди однаково, як саме ви отримуєте дані, коли кеш не вистачає.
Щоб переглянути деякі приклади, ви можете переглянути функції, які використовують cache_get () , наприклад, змінний_initialize () .
Якщо ваша функція викликається кілька разів, ви, ймовірно, хочете поєднати її зі статичним кешем, див., Наприклад, archiver_get_info () . І якщо відновлення даних відбувається дуже повільно, ви можете запобігти його повторному виконанню, використовуючи блокуючий фреймворк, як це робиться varia_initialize ().
Зауважте, що кешування одного запиту має сенс лише у випадку повільного, оскільки cache_get () також є db-запитом, якщо ви не використовуєте альтернативний кешбек, такий як Memcache.
І нарешті, Views має кешування вже вбудованим і може бути налаштовано у вашому представленні. Тож це може бути і варіантом.
db_query()
, а також необхідність кешувати значення, $results->fetchAll()
а не $results
є ключовим фактором для того, щоб насправді змусити його працювати.
Я не думаю, що у шару БД немає вбудованого механізму кешування (хоча я можу помилятися), але ви можете використовувати API кешу за замовчуванням.
Це лише основний приклад, який кешуватиме результати запиту, щоб отримати вузли певного типу:
function MYMODULE_get_nodes_by_type($type) {
// Setup a cache ID
$cid = 'MYMODULE:node_types:' . $type;
// If a cached entry exists, return it
if ($cached = cache_get($cid)) {
return $cached->data;
}
// Otherwise load the data
$data = db_query('SELECT * FROM {node} WHERE type = :type', array(':type' => $type))->fetchAll();
// And cache it
cache_set($cid, $data, 'cache', strtotime('+6 days'));
}
На додаток до стандартного механізму cache_set / cache_get, який надає Drupal, якщо ви використовуєте MySQL як свою базу даних, ви можете включити кеш запитів , який може кешувати результати переглядів або будь-які інші запити бази даних, прозоро. mysqltuner може допомогти у визначенні хороших значень розміру кешу.
Просто зауважте, що якщо ви багато пишете в базу даних, то кешування запитів стає менш ефективним через те, як працює стратегія відключення кешу (запис у таблицю приводить до недійсності всі записи, які ВИБІРТЕ ВІД або приєднатися до цієї таблиці).
Існує також механізм кешування для PostgreSQL , але я не маю прямого досвіду роботи з ним.
Нещодавно я відкрив модуль кеш-дій . За допомогою цього модуля ви можете встановити кешування подання кешу, керованого правилами, та створити правило для вимкнення кешу на певних екранах перегляду та переглядів.
Наприклад, кеш для подання, який перелічує вузли певного типу вмісту, може бути випорожнений, коли створюється новий вузол цього типу вмісту.