APC е PECL extension за PHP, който позволява кеширането на данни и по този начин примерно се избягва изпълнението на една MySQL заявка и ако тя връща едни и същи данни сами се сещате, че е излишно да се изпълнява всеки път, разбира се може да се хардкод-не резултата в кода, но по добрия вариант за мен е кеширането. Преди време тествах различните кеширащи системи от тези тестове са ми останали няколко класове, които реших да споделя.
APC Cache Class:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | <?php /** * Alternative PHP Cache Class * * @param int $lifetime * @author Venelin Kochev < vkwebdev@gmail.com > * @version 1.0 * @link http://cyberroot.org * @copyright 2008 Venelin Kochev * */ class APCCache{ //Cache life time //@param: integer private $lifetime = 3600; function __construct($lifetime = ''){ if (!extension_loaded('apc')) { die('<b>Fatal Error:</b> Cache::__construct() - The apc extension must be loaded for using Cache !'); } if(isset($lifetime)) $this->lifetime = $lifetime; } /** * Save cache data. * * @param array $data * @param string $id * @return boolean */ public function save($data, $id){ $result = apc_store($id, array($data, time()), $this->lifetime); return $result; } /** * Load cache by Key * * @param string $id * @return array * */ public function load($id){ $tmp = apc_fetch($id); if (is_array($tmp)) { return $tmp[0]; } return false; } /** * Delete cache by Key. * * @param string $id * @return boolean */ public function remove($id){ return apc_delete($id); } } ?> |
Използва се по следния начин:
1 2 3 4 5 6 7 8 9 10 11 12 | <?php $lifetime = 3500; $cache = new APCCahce($lifetime); if(!$count = $cache->load('count_category')){ $count = GetCount(); // трябва да връща резултата от MySQL query-то. $cache->save($count, 'count_category') } ?> |
Така се прави проверка дали кеш-а съществува, ако го няма се създава, при следващото извикване заявката няма да се изпълни и ще бъде зареден кеш-а.
Публикации (RSS)