давайте подведем итоги вашего вопроса. Вы хотите кэшировать результаты запроса, как вы это делаете?
Вы предлагаете решение (сохраните в плоском файле), прежде чем ответить на свой вопрос. Так конечно, вы можете сделать это. Но если вы собираетесь создать небольшую инфраструктуру, почему бы не написать класс данных для кэширования и не кэшировать все виды вещей. Может иметь 3 свойства
- имя элемента кэша
- значение элемента кэша
- отметка времени последнего обновления элемента кэша
добавить пару функций
function loadCachedData($itemName);
//see if more time has passed than in the cache expiration window
function isLoadedDataFresh($expirationWindowInSeconds);
function getLoadedItemValue();
function storeCacheValueForItem($itemName, $value);
Вы уже должны написать запрос, чтобы выбрать свой элемент, поэтому в вашем контроллере просто сделайте это:
$cacheHandle = new Cache();
$cacheHandler->loadCachedData('whateverMyVarIs');
$displayValue = '';
if($cacheHandler->isLoadedDataFresh(60 * 60 * 24) ) //sec*min*hour = 1 day
{
$displayValue = $cacheHandler->getLoadedItemValue();
}
else
{
//update the display value here with your real query
$displayValue = doMyStuff();
$cacheHandler->storeCacheValueForItem('whateverMyVarIs', $displayValue);
}
Конечно, вам придется вычеркнуть этот код из ада, превратить окна времени истечения в константы и реализовать класс, но это не должно быть слишком сложно. Плюс, у вас уже есть база данных ... просто верните кеш класс с этим и кешируйте !!! Или, если вы хотите использовать еще лучший инструмент для быстрого кэширования, используйте memcached !! http://www.danga.com/memcached/
Но, наконец, я просто должен спросить ... вы преждевременно оптимизируете? Кто-то действительно жаловался на производительность на этой странице?