PHP ファイル データ キャッシュの実装コード_PHP チュートリアル

WBOY
リリース: 2016-07-20 11:09:03
オリジナル
990 人が閲覧しました

PHP は、コード キャッシュ テクノロジを実装するためにファイル データ キャッシュを実装します。ページにアクセスするたびに、まず対応するキャッシュが存在するかどうかを検出し、存在しない場合はデータベースに接続し、データを取得し、テンプレート変数の割り当てを完了します。ページを表示し、同時にキャッシュ ファイルを生成します。そのため、次回アクセスするときにキャッシュされたファイルが機能します。ファイル データ キャッシュの実装コードを実装するには、ページにアクセスするたびに実行されます。対応するキャッシュが存在するかどうかを最初に検出し、存在しない場合は、データベース チュートリアル に接続し、データを取得し、テンプレート変数の割り当てを完了し、ページを表示し、同時にキャッシュ ファイルを生成します。キャッシュファイルは次回アクセスしたときから有効になり、ifブロックのデータクエリ文は実行されません。もちろん、有効期間の設定やキャッシュグループの設定など、実際に使用する際には考慮すべき点はたくさんあります

クラスcacheException extends例外{}
/**
* キャッシュ抽象クラス
*/
抽象クラスcache_abstract {
/**
*/
抽象パブリック関数fetch($key); 

/**
* キャッシュ変数
*
* @param string $key キャッシュ変数の添字
* @param string $value キャッシュ変数の値
* @return bool
*/
抽象パブリック関数store($key, $value); 

/**
* キャッシュ変数の削除
*
* @param string $key キャッシュの添え字
*/
抽象パブリック関数 delete($key); 

/**
* すべてのキャッシュをクリア(削除)します
*/
抽象パブリック関数clear(); 

/**
*/
抽象パブリック関数 lock($key); 

/**
*/
抽象パブリック関数unlock($key); 

/**
*キャッシュ変数がロックされているかどうかを取得します
*
* @param string $ keyキャッシュ添え
*/
抽象パブリック関数 islocked($key); 

/**
*
- ‐ ‐ - ‐-- - - - - 、 - を使用して使用します。*/
public function checklock($key) {
if (!$this->islocked($key)) {
return $this; 
}

$tries = 10; 
$count = 0; 
do {
usleep(200); 
$count ++; 
} while ($count islocked($key));  // 最做十次睡眠等待機解锁,超時则跳过并解锁

$this->islocked($key) && $this->unlock($key); 

$this を返します。 
}
}
/**&#&*/
CLASSCACHE_APCextends cache_abstract {

    protected $_prefix = 'cache.mjie.net'; 

public function __construct() {
if (!function_exists('apc_cache_info')) {
throw new cacheException('apc 拡張機能がインストールされていません'); 
}
}

/**
* キャッシュ変数の保存
*
* @param string $key
* @parammixed $value
* @return bool
*/
public function store($key, $value) {
return apc_store($this->_storagekey($key), $value); 
}

/**
* 読み取りキャッシュ
*
* @param string $key
* @returnmixed
*/
public function fetch($key) {
return apc_fetch($this->_storagekey($key)); 
}

/**
*/
パブリック関数 clear() {
apc_clear_cache(); 
$this を返します。 
}

/**
*/
public function delete($key) {
apc_delete($this->_storagekey($key)); 
$this を返します。 
}

/**
*/
public function islocked($key) {
if ((apc_fetch($this->_storagekey($key) . '.lock')) === false) {
false を返します。 
}

trueを返します。 
}

/**
* キャッシュユニットのロック
*
* @param string $key
* @return cache_apc
*/
public function lock($key) {
apc_store($this->_storagekey($key) . '.lock', '', 5); 
$this を返します。 
}

/**
* キャッシュユニットのロック解除
*/
public functionunlock($key) {
apc_delete($this->_storagekey($key) . '.lock'); 
$this を返します。 
}

/**
* 完全なキャッシュ名
*
* @param string $key
* @return string
*/
プライベート関数 _storagekey($key) {
return $this->_prefix . '_' 。 $キー; 
}
}

/**
 * 文件缓存实现
*
*
* @category mjie
* @package キャッシュ
* @author 流水孟春
* @copyright copyright (c) 2008-
* @license 新しい bsd ライセンス
* @version $id:cache/file.php バージョン番号 2010-04-18 16:46 cmpan $
*/
class queue_file extends cache_abstract {
public $usesubdir = false; 

protected $_cachesdir = 'キャッシュ'; 

public function __construct() {
if (define('data_dir')) {
$this->_setcachedir(data_dir . '/cache'); 
}
}

/**
* キャッシュ ファイルを取得します
*
* @param string $key*/
protected function _getcachefile($key) {
$subdir = $this->usesubdir ? substr($key, 0, 2) 。 '/' : ''; 
$this->_cachesdir を返します。 '/' 。 $サブディレクトリ 。 $key 。 '.php'; 
}

/**
* キャッシュ変数を読み取ります
* 情報漏洩を防ぐため、キャッシュ ファイルの形式は「」で始まります
混合
*/
public function fetch($key) {
$cachefile = self::_getcachefile($key); 
if (file_exists($cachefile) && is_readable($cachefile)) {
// include 方式
// return include $cachefile; 
// 系列化方式

return unserialize(@file_get_contents($cachefile, false, null, 13)); 
}

false を返します。 
}

/**
* キャッシュ変数
* 情報漏洩を防ぐため、キャッシュファイルの形式は「」で始まるphpファイルとなっています
$value キャッシュ変数の値
* @return bool
*/
public function store($key, $value) {
$cachefile = self::_getcachefile($key); 
$cachedir = dirname($cachefile); 

if(!is_dir($cachedir)) {
if(!@mkdir($cachedir, 0755, true)) {
スロー新しいキャッシュ例外("キャッシュディレクトリを作成できませんでした"); 
}
}
// include 方式
//return @file_put_contents($cachefile, '
return @file_put_contents($cachefile, '' .serialize($value)); 
}

/**
* 删除缓存变量
*
* @param string $key 缓存下标
     * @return Cache_file
*/
public function delete($key) {
if(emptyempty($key)) {
throw new queueException("missing argument 1 for queue_file::delete()"); 
}

$cachefile = self::_getcachefile($key); 
if(!@unlink($cachefile)) {
throw new cacheException("キャッシュ ファイルを削除できませんでした"); 
}

$this を返します。 
}

/**
_*/
public function islocked($key) {
$cachefile = self::_getcachefile($key); 
clearstatcache(); 
return file_exists($cachefile . '.lock'); 
}

/**
* 锁定
*
* @param string $key
* @return cache_file
    */
public function lock($key) {
$cachefile = self::_getcachefile($key); 
$cachedir = dirname($cachefile); 
if(!is_dir($cachedir)) {
if(!@mkdir($cachedir, 0755, true)) {
if(!is_dir($cachedir)) {
throw new cacheException(「キャッシュ ディレクトリを作成できませんでした」 ); 
}
}}}}
// 
$this を返します。 
}

/**
* 解锁
*
* @param string $key
* @return cache_file
    */
public functionunlock($key) {
$cachefile = self::_getcachefile($key); 
@unlink($cachefile . '.lock'); 
戻る


次の項を見てsmartyの保存文件例番号

再度見るsmartyが提供する页面缓存機能:

1

2require(' Smarty.class.php') ;

3$smarty = new Smarty;

4$smarty->caching = true;

5if(!$smarty->is_cached('index.tpl')) {

6 // 利用可能なキャッシュはありません, ここで変数の代入を行います。 ;

11?>

php缓存技术動作時、当程序查询データ的時、会擊的結果序列化後文件保存,後同样的查询语句是可以不使用直接查询データベース库この変更により、プログラムの実行速度が大幅に向上します。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/444824.html技術記事 PHP はコード キャッシュ テクノロジーを実装するためにファイル データ キャッシュを実装しています。ページにアクセスするたびに、対応するキャッシュが存在するかどうかを最初に検出し、存在しない場合はデータベースに接続してデータを取得します。
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート