php实现文件数据缓存实现[网站编程]
本文“php实现文件数据缓存实现[网站编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
缓存技术是每次拜候页面的时刻,城市先检测呼应的缓存能否存在,假如不存在,就衔接数据库教程,得到数据,完成模板变量的赋值,显示页面,同时生成缓存文件,这样下次拜候的时刻缓存文件就施展作用了,而不会再履行if块的数据查询语句了.当然,在实际利用中会有很多东西要考虑,比方,有效期的设置,缓存组的设置等等
<?php
class cacheexception extends exception {}
/**
* 缓存抽象类
*/
abstract class cache_abstract {
/**
* 读缓存变量
*
* @param string $key 缓存下标
* @return mixed
*/
abstract public function fetch($key);
/**
* 缓存变量
*
* @param string $key 缓存变量下标
* @param string $value 缓存变量的值
* @return bool
*/
abstract public function store($key, $value);
/**
* 删除缓存变量
*
* @param string $key 缓存下标
* @return cache_abstract
*/
abstract public function delete($key);
/**
* 清(删)除全部缓存
*
* @return cache_abstract
*/
abstract public function clear();
/**
* 锁定缓存变量
*
* @param string $key 缓存下标
* @return cache_abstract
*/
abstract public function lock($key);
/**
* 缓存变量解锁
*
* @param string $key 缓存下标
* @return cache_abstract
*/
abstract public function unlock($key);
/**
* 获得缓存变量能否被锁定
*
* @param string $key 缓存下标
* @return bool
*/
abstract public function islocked($key);
/**
* 确保不是锁定状况
* 最多做$tries次就寝等候解锁,超时则跳过并解锁
*
* @param string $key 缓存下标
*/
public function checklock($key) {
if (!$this->islocked($key)) {
return $this;
}
$tries = 10;
$count = 0;
do {
usleep(200);
$count ++;
} while ($count <= $tries && $this->islocked($key)); // 最多做十次就寝等候解锁,超时则跳过并解锁
$this->islocked($key) && $this->unlock($key);
return $this;
}
}
/**
* apc扩大缓存实现
*
*
* @category mjie
* @package cache
* @author 流水孟春
* @copyright copyright (c) 2008- <cmpan(at)qq.com>
* @license new bsd license
* @version $id: cache/apc.php 版本号 2010-04-18 23:02 cmpan $
*/
class cache_apc extends cache_abstract {
protected $_prefix = 'cache.mjie.net';
public function __construct() {
if (!function_exists('apc_cache_info')) {
throw new cacheexception('apc extension didn't installed');
}
}
/**
* 保存缓存变量
*
* @param string $key
* @param mixed $value
* @return bool
*/
public function store($key, $value) {
return apc_store($this->_storagekey($key), $value);
}
/**
* 读取缓存
*
* @param string $key
* @return mixed
*/
public function fetch($key) {
return apc_fetch($this->_storagekey($key));
}
/**
* 排除缓存
*
* @return cache_apc
*/
public function clear() {
apc_clear_cache();
return $this;
}
/**
* 删除缓存单元
*
* @return cache_apc
*/
public function delete($key) {
apc_delete($this->_storagekey($key));
return $this;
}
/**
* 缓存单元能否被锁定
*
* @param string $key
* @return bool
*/
public function islocked($key) {
if ((apc_fetch($this->_storagekey($key) . '.lock')) === false) {
return false;
}
return true;
}
/**
* 锁定缓存单元
*
* @param string $key
* @return cache_apc
*/
public function lock($key) {
apc_store($this->_storagekey($key) . '.lock', '', 5);
return $this;
}
/**
* 缓存单元解锁
*
* @param string $key
* @return cache_apc
*/
public function unlock($key) {
apc_delete($this->_storagekey($key) . '.lock');
return $this;
}
/**
* 完好缓存名
*
* @param string $key
* @return string
*/
private function _storagekey($key) {
return $this->_prefix . '_' . $key;
}
}
/**
* 文件缓存实现
*
*
* @category mjie
* @package cache
* @author 流水孟春
* @copyright copyright (c) 2008- <cmpan(at)qq.com>
* @license new bsd license
以上是“php实现文件数据缓存实现[网站编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |