PHP怎样完成缓存性能
首将要缓存的数据应用函数“json_eecode()”进行JSON编码;而后以缓存数据的键名为文件名进行创立文件;最初将JSON编码后的数据经过“file_put_contents()”函数写入到文件中便可。
示例代码:
<?php class FileCache { /** * 缓存目次 * @var */ private $cache_dir; /** * @param $cache_dir * @throws Exception */ public function __construct($cache_dir) { $this->cache_dir = $cache_dir; if (!is_dir($cache_dir)) { $make_dir_result = mkdir($cache_dir, 0755, true); if ($make_dir_result === false) throw new Exception('Cannot create the cache directory'); } } /** * 依据key猎取值,会判别能否过时 * @param $key * @return mixed */ public function get($key) { $cache_data = $this->getItem($key); if ($cache_data === false || !is_array($cache_data)) return false; return $cache_data['data']; } /** * 增加或笼罩一个key * @param $key * @param $value * @param $expire * @return mixed */ public function set($key, $value, $expire = 0) { return $this->setItem($key, $value, time(), $expire); } /** * 设置蕴含元数据的信息 * @param $key * @param $value * @param $time * @param $expire * @return bool */ private function setItem($key, $value, $time, $expire) { $cache_file = $this->createCacheFile($key); if ($cache_file === false) return false; $cache_data = array('data' => $value, 'time' => $time, 'expire' => $expire); $cache_data = json_encode($cache_data); $put_result = file_put_contents($cache_file, $cache_data); if ($put_result === false) return false; return true; } /** * 创立缓存文件 * @param $key * @return bool|string */ private function createCacheFile($key) { $cache_file = $this->path($key); if (!file_exists($cache_file)) { $directory = dirname($cache_file); if (!is_dir($directory)) { $make_dir_result = mkdir($directory, 0755, true); if ($make_dir_result === false) return false; } $create_result = touch($cache_file); if ($create_result === false) return false; } return $cache_file; } /** * 判别Key能否存正在 * @param $key * @return mixed */ public function has($key) { $value = $this->get($key); if ($value === false) return false; return true; } /** * 加法递增 * @param $key * @param int $value * @return mixed */ public function increment($key, $value = 1) { $item = $this->getItem($key); if ($item === false) { $set_result = $this->set($key, $value); if ($set_result === false) return false; return $value; } $check_expire = $this->checkExpire($item); if ($check_expire === false) return false; $item['data'] += $value; $result = $this->setItem($key, $item['data'], $item['time'], $item['expire']); if ($result === false) return false; return $item['data']; } /** * 减法递增 * @param $key * @param int $value * @return mixed */ public function decrement($key, $value = 1) { $item = $this->getItem($key); if ($item === false) { $value = 0 - $value; $set_result = $this->set($key, $value); if ($set_result === false) return false; return $value; } $check_expire = $this->checkExpire($item); if ($check_expire === false) return false; $item['data'] -= $value; $result = $this->setItem($key, $item['data'], $item['time'], $item['expire']); if ($result === false) return false; return $item['data']; } /** * 删除了一个key,共事会删除了缓存文件 * @param $key * @return mixed */ public function delete($key) { $cache_file = $this->path($key); if (file_exists($cache_file)) { $unlink_result = unlink($cache_file); if ($unlink_result === false) return false; } return true; } /** * 分明一切缓存 * @return mixed */ public function flush() { return $this->delTree($this->cache_dir); } /** * 递归删除了目次 * @param $dir * @return bool */ function delTree($dir) { $files = array_diff(scandir($dir), array('.', '..')); foreach ($files as $file) { (is_dir("$dir/$file")) ? $this->delTree("$dir/$file") : unlink("$dir/$file"); } return rmdir($dir); } /** * 依据key猎取缓存文件门路 * * @param string $key * @return string */ protected function path($key) { $parts = array_slice(str_split($hash = md5($key), 2), 0, 2); return $this->cache_dir . '/' . implode('/', $parts) . '/' . $hash; } /** * 猎取含有元数据的信息 * @param $key * @return bool|mixed|string */ protected function getItem($key) { $cache_file = $this->path($key); if (!file_exists($cache_file) || !is_readable($cache_file)) { return false; } $cache_data = file_get_contents($cache_file); if (empty($cache_data)) return false; $cache_data = json_decode($cache_data, true); if ($cache_data) { $check_expire = $this->checkExpire($cache_data); if ($check_expire === false) { $this->delete($key); return false; } } return $cache_data; } /** * 反省key能否过时 * @param $cache_data * @return bool */ protected function checkExpire($cache_data) { $time = time(); $is_expire = intval($cache_data['expire']) !== 0 && (intval($cache_data['time']) + intval($cache_data['expire']) < $time); if ($is_expire) return false; return true; } }
保举教程:《PHP教程》
以上就是PHP怎样完成缓存性能的具体内容,更多请存眷资源魔其它相干文章!
标签: php php教程 Cache php故障解决 php使用问题
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
抱歉,评论功能暂时关闭!