APC およびファイル キャッシュを実装する PHP キャッシュ実装を送信します。 Cache_Abstract を継承することで、サードパーティのキャッシュ ツールを呼び出すことができます。
shindigのキャッシュクラスとapcを参照してください。
PHPコード
-
-
クラス CacheException は例外 {} を拡張します
-
/**
-
* キャッシュ抽象クラス
-
*/
-
抽象クラス Cache_Abstract {
-
/**
-
* キャッシュ変数を読み取る
-
*
-
* @param string $key キャッシュ インデックス
-
* * @return 混合
-
*/
-
抽象的なパブリック関数 fetch($key);
-
-
/**
-
* キャッシュ変数
-
*
-
* @param string $key キャッシュ変数の添字
-
* @param string $value キャッシュ変数の値
-
* * @return bool
-
*/
-
抽象パブリック関数ストア($key, $value);
-
-
/**
-
* キャッシュ変数を削除します
-
*
-
* @param string $key キャッシュ インデックス
-
* @return Cache_Abstract
-
*/
-
abstract public function delete($key);
-
-
/**
-
* すべてのキャッシュをクリア(削除)します
-
*
-
* @return Cache_Abstract
-
*/
-
抽象的なパブリック関数clear();
-
-
/**
-
* キャッシュ変数をロックする
-
*
-
* @param string $key キャッシュ インデックス
-
* @return Cache_Abstract
-
*/
-
抽象的な公開関数ロック($key);
-
-
/**
-
* キャッシュ変数のロックを解除します
-
*
-
* @param string $key キャッシュ インデックス
-
* @return Cache_Abstract
-
*/
-
抽象的な公開関数のロック解除($key);
-
-
/**
-
* キャッシュ変数がロックされているかどうかを取得します
-
*
-
* @param string $key キャッシュ インデックス
-
* * @return bool
-
*/
-
抽象的なパブリック関数 isLocked($key);
-
-
/**
-
* ロックされていないことを確認してください
-
* * ロック解除を待機するために最大 $tries 回スリープし、タイムアウト後にスキップしてロックを解除します
-
*
-
* @param string $key キャッシュ インデックス
-
*/
-
public function checkLock($key) {
-
If (!$this->isLocked($key)) {
-
$これを返します
-
}
-
-
$tries = 10;
$ count =
-
する {
usleep(200);
-
$count ++;
-
-
$this->isLocked($key)
-
$これを返します-
}-
}-
-
-
/**-
* APC 拡張キャッシュの実装 -
* -
* -
* @category Mjie -
* @package キャッシュ -
* @著者柳水孟春-
* @copyright 著作権 (c) 2008-
-
* @license 新しい BSD ライセンス
-
* @version $Id: Cache/Apc.php バージョン番号 2010-04-18 23:02 cmpan $
-
*/
-
class Cache_Apc extends Cache_Abstract {
-
-
保護された $_prefix = 'cache.mjie.net';
-
パブリック関数 __construct() { -
If (!function_exists('apc_cache_info')) { -
新しいcacheexception( 'APC拡張子はインストールされませんでした');
-
}
-
}
-
-
/**
-
* * キャッシュ変数を保存する
-
*
-
* * @param string $key
-
* * @param 混合 $value
-
* * @return bool
-
*/
-
パブリック関数ストア($key, $value) {
-
return apc_store($this->_storageKey($key), $value);
}-
-
/**-
* 読み取りキャッシュ -
* -
* * @param string $key -
* * @return 混合-
*/ -
パブリック関数 fetch($key) { -
return apc_fetch($this->_storageKey($key));
-
}
-
-
/**
-
* キャッシュをクリアします
-
*
-
* @return Cache_Apc
-
*/
-
public 関数 clear() {
-
apc_clear_cache();
-
$this を返します。
-
}
-
-
/**
-
* キャッシュユニットを削除します
-
*
-
* @return Cache_Apc
-
*/
-
public function delete($key) {
-
apc_delete($this->_storageKey($key));
-
$this を返します。
-
}
-
-
/**
-
* キャッシュユニットがロックされているかどうか
-
*
-
* * @param string $key
-
* * @return bool
-
*/
-
パブリック関数 isLocked($key) {
-
if ((apc_fetch($this->_storageKey($key) . '.lock')) === false) {
-
false を返します。
-
}
-
-
true を返します。
-
}
-
-
/**
-
* キャッシュユニットをロック
-
*
-
* * @param string $key
-
* @return Cache_Apc
-
*/
-
パブリック関数ロック($key) {
-
apc_store($this->_storageKey($key) . '.lock', '', 5);
-
$this を返します。
-
}
-
-
/**
-
* キャッシュユニットのロックが解除されました
-
*
-
* * @param string $key
-
* @return Cache_Apc
-
*/
-
公開機能のロック解除($key) {
-
apc_delete($this->_storageKey($key) . '.lock');
-
$this を返します。
-
}
-
-
/**
-
*完全なキャッシュ名
-
*
-
* * @param string $key
-
* * @戻り文字列
-
*/
-
プライベート 関数 _storageKey($key) {
-
$this->_prefix を返します。 「_」 。 $キー;
-
}
-
}
-
-
/**
-
* ファイルキャッシュの実装
-
*
-
*
-
* @category Mjie
-
* @package キャッシュ
-
* @著者柳水孟春
-
* @copyright 著作権 (c) 2008-
* @license 新しい BSD ライセンス -
* @version $Id: Cache/File.php のバージョン番号 2010-04-18 16:46 cmpan $ -
*/ -
class Cache_File extends Cache_Abstract { -
public $useSubdir = false; -
-
protected $_cachesDir = 'キャッシュ'; -
-
パブリック関数 __construct() { -
if (定義('DATA_DIR')) { -
$this->_setCacheDir(DATA_DIR . '/cache'); -
} -
} -
-
/**-
* キャッシュファイルを取得します -
* -
* * @param string $key -
* * @戻り文字列 -
*/ -
保護された関数 _getCacheFile($key) { -
$subdir = $this->Subdir を使用しますか? substr($key, 0, 2) 。 '/' : ''; -
$this->_cachesDir を返します。 '/' 。 $サブディレクトリ。 $key 。 '.php'; -
}
-
-
/**
-
* キャッシュ変数を読み取る
-
※情報漏洩防止のため、キャッシュファイル形式は「」で始まるphpファイルとなります
-
* *
-
* @param string $key キャッシュ インデックス
-
* * @return 混合
-
*/
-
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ファイルとなります
-
*
-
* @param string $key キャッシュ変数の添字
-
* @param string $value キャッシュ変数の値
-
* * @return bool
-
*/
-
public function store($key, $value) {
-
$cacheFile = self::_getCacheFile($key);
-
$cacheDir = ディレクトリ名($cacheFile);
-
-
if(!is_dir($cacheDir)) {
-
if(!@mkdir($cacheDir, 0755, true)) {
-
throw new CacheException("キャッシュディレクトリを作成できませんでした");
-
}
-
}
-
// 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 CacheException("Cache_File::delete() の引数 1 がありません");
-
}
-
-
$cacheFile = self::_getCacheFile($key);
-
if(!@unlink($cacheFile)) {
-
throw new CacheException("キャッシュファイルを削除できませんでした");
-
}
-
-
$this を返します。
-
}
-
-
/**
-
* キャッシュユニットはロックされていますか?
* -
* * @param string $key -
* * @return bool -
*/ -
パブリック関数 isLocked($key) { -
$cacheFile = self::_getCacheFile($key); -
クリアスタットキャッシュ(); -
return file_exists($cacheFile . '.lock'); -
} -
-
/** -
* 锁定 -
* -
* @param 文字列 $key -
* @return Cache_File -
*/ -
パブリック関数ロック($key) { -
$cacheFile = self::_getCacheFile($key); -
$cacheDir = ディレクトリ名($cacheFile); -
if(!is_dir($cacheDir)) { -
if(!@mkdir($cacheDir, 0755, true)) { -
if(!is_dir($cacheDir)) { -
throw new CacheException("キャッシュディレクトリを作成できませんでした"); -
} -
} -
} -
-
// 保存ファイルの保存期間と修正時間を設定します -
@touch($cacheFile . '.lock'); -
$this を返します。 -
}
-
-
/**
-
* 解锁
-
*
-
* @param 文字列 $key
-
* @return Cache_File
-
*/
-
パブリック関数のロック解除($key) {
-
$cacheFile = self::_getCacheFile($key);
@unlink($cacheFile . '.lock');
-
戻る
-
http://www.bkjia.com/PHPjc/735086.html
www.bkjia.comtruehttp://www.bkjia.com/PHPjc/735086.html技術記事 PHP キャッシュ実装を送信して、APC およびファイル キャッシュを実装します。 Cache_Abstract を継承することで、サードパーティのキャッシュ ツールを呼び出すことができます。 shindigのキャッシュクラスとapcを参照してください。 PHP コード ?php classCacheE...