У меня есть несколько запросов mysql, которые извлекают данные из базы данных, результаты не будут меняться в течение 24 часов, и я хочу хранить в кеше, как кэшировать результаты за 24 часа и перечитывать их после истечения срока действия?
<?php $getTopics=$db->loadAssoc($db->setQuery("SELECT * , categories.title AS category_title, status_topics.title as status_topic FROM contents JOIN categories ON categories.id = contents.category JOIN status_topics ON status_topics.id = contents.status ")); $getCategories = $db->loadAssoc($db->setQuery("SELECT * FROM categories")); $getTags = $db->loadAssoc($db->setQuery("SELECT * FROM status_topics")); $getPages = $db->loadAssoc($db->setQuery("SELECT * FROM pages")); $getSiteInformation = $db->loadRow($db->setQuery("SELECT * FROM settings JOIN categories")); $getSubDomainInformation = $db->loadAssoc($db->setQuery("SELECT * FROM sub_domains")); $getUserInformation = $db->loadAssoc($db->setQuery("SELECT * FROM users")); ?>
Очень простой механизм кэширования без базы данных:
$filename = 'cache.txt'; if (filemtime($filename) < time()-24*3600) { //older than a day /*get your data*/ file_put_contents($filename, serialize(array($getCategories, $getTags, [...])); //your data in a serialized form } else { $data = unserialize(file_get_contents($filename)); list($getCategories, $getTags, [...]) = $data; }
(Очевидно, вы должны заменить […] ваши переменные, содержащие ваши данные)
По умолчанию запросы mysql cahche и быстрее выполняются при извлечении результатов samre, вы также можете сообщить mysql о результатах кэширования в памяти.
например,
$getCategories = $db->loadAssoc($db->setQuery("SELECT SQL_CACHE * FROM categories"));
кеширование остается в памяти до перезапуска сервера или принудительно очищает память.
$db->query("RESET QUERY CACHE;");