Кеширование

Главные вкладки

Аватар пользователя gumk gumk 12 января 2009 в 23:34

1) Добрый день, я в php чайник, в определенных tpl.php файлах я делаю определенные запросы в базу, как можно их закешировать, так, что-бы обновление кеша происходило при определенном условии?
2) Второй вопрос, что лучше несколько конкретных запросов в базу или один запрос с формированием из него большого массива и последующей его обработки?

Комментарии

Аватар пользователя extrim extrim 13 января 2009 в 16:06

<?php
function my_module_function($reset = FALSE) {
static $my_data;
if (!isset($my_data) || $reset) {
if (!$reset && ($cache = cache_get('my_module_data')) && !empty($cache->data)) {
$my_data = unserialize($cache->data);
}
else {
// Do your expensive calculations here, and populate $my_data
// with the correct stuff..
cache_set('my_module_data', 'cache', serialize($my_data));
}
}
return $my_data;
}
?>

Аватар пользователя gumk gumk 13 января 2009 в 18:16

extrim спасибо буду пробовать
Химический Али интересный ответ )))
просто я хочу сделать в группе блок с выводом 6 юзеров, количество юзеров, 6 юзеров онлайн, количество юзеров онлайн, спиок админов, проверку является ли текущий пользователь членом группы.
для этого я делаю один запрос и формирую массив, который обрабатываю и получаю переменные в которых содержится уже "оформленные" нужные мне блоки.
И в отношении производительности не понимаю как лучше так как сделал или для каждой вещи лучше сделать отдельный запрос?

Аватар пользователя nleo nleo 13 января 2009 в 19:22

"gumk" wrote:

cache_set('my_module_data', 'cache', serialize($my_data));
$my_data = unserialize($cache->data);

cache_set() и cache_get() автоматически производет сериализацию/десириализацию при необходимости и использования serialize() и unserialize() самому - избыточно

http://api.drupal.org/api/function/cache_set/6
http://api.drupal.org/api/function/cache_get/6