Не имеет значения для кэширования, если вы используете views или db_query (). Кэширование работает всегда одинаково, то, как данные выбираются, когда кэш пропускает, полностью зависит от вас.
- Создайте идентификатор кэша, чтобы идентифицировать вашу запись в кэше. Может быть простой, жестко закодированной строкой или чем-то сложным, основанным на аргументах и так далее.
- Проверьте, можете ли загрузить из кеша.
- Если нет, пересоберите данные и поместите их в кеш с желаемым сроком действия.
Чтобы увидеть некоторые примеры, вы можете взглянуть на функции, которые используют cache_get () , например variable_initialize () .
Если ваша функция вызывается несколько раз, вы, вероятно, захотите объединить ее со статическим кешем, см., Например, archiver_get_info () . И если перестройка данных действительно медленная, вы можете предотвратить ее многократное использование, используя платформу блокировки, как variable_initialize ().
Обратите внимание, что кэширование одного запроса имеет смысл только в том случае, если он медленный, потому что cache_get () также является запросом базы данных, если вы не используете альтернативный серверный кеш, такой как Memcache.
И наконец, в представлениях уже встроено кэширование, и его можно настроить в своем представлении. Так что это может быть вариант.
db_query()
и необходимости кэшировать значение,$results->fetchAll()
а не$results
является ключом к тому, чтобы заставить его работать.Я не думаю, что уровень БД имеет какой-либо встроенный механизм кэширования (хотя я могу ошибаться), но вы можете использовать API кеша по умолчанию.
Это просто базовый пример, который будет кэшировать результаты запроса, чтобы получить узлы определенного типа:
источник
В дополнение к стандартному механизму cache_set / cache_get , который предоставляет Drupal, если вы используете MySQL в качестве базы данных, вы можете включить кэш запросов , который может прозрачно кэшировать результаты просмотров или любые другие запросы к базе данных. mysqltuner может помочь в определении хороших значений размера кэша.
Просто отметьте, что если вы делаете много записи в базу данных, то кэширование запросов становится менее эффективным из-за того, как работает стратегия аннулирования кэша (запись в таблицу делает недействительными все записи, которые ВЫБИРАЮТ ОТ или ПРИСОЕДИНЯЮТСЯ к этой таблице).
Существует также механизм кэширования для PostgreSQL , но я не имею прямого опыта с ним.
источник
Недавно я обнаружил модуль Cache Actions . С помощью этого модуля вы можете установить для кэширования представлений значение «Кэш, запускаемый правилами», и создать правило для аннулирования кэша в определенных представлениях и представлениях представлений.
Например, кэш для представления, в котором перечислены узлы определенного типа контента, может быть очищен при создании нового узла этого типа контента.
источник