ホームページ  >  記事  >  バックエンド開発  >  PHP キャッシュ テクノロジの実装_PHP チュートリアル

PHP キャッシュ テクノロジの実装_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:38:31894ブラウズ

APC およびファイル キャッシュを実装する PHP キャッシュ実装を送信します。 Cache_Abstract を継承することで、サードパーティのキャッシュ ツールを呼び出すことができます。
shindigのキャッシュクラスとapcを参照してください。
PHPコード

  1. クラス CacheException は例外 {} を拡張します  
  2. /**
  3. * キャッシュ抽象クラス
  4. ​*/
  5. 抽象クラス Cache_Abstract {
  6.     /**
  7. * キャッシュ変数を読み取る
  8. *
  9. * @param string $key キャッシュ インデックス
  10. * * @return 混合
  11. ​​*/
  12.     抽象的なパブリック関数 fetch($key);  
  13.       
  14.     /**
  15. * キャッシュ変数
  16. *
  17. * @param string $key キャッシュ変数の添字
  18. * @param string $value キャッシュ変数の値
  19. * * @return bool
  20. ​​*/
  21.     抽象パブリック関数ストア($key, $value);  
  22.       
  23.     /**
  24. * キャッシュ変数を削除します
  25. *
  26. * @param string $key キャッシュ インデックス
  27. * @return Cache_Abstract
  28. ​​*/
  29.     abstract public function delete($key);  
  30.       
  31.     /**
  32. * すべてのキャッシュをクリア(削除)します
  33. *
  34. * @return Cache_Abstract
  35. ​​*/
  36.     抽象的なパブリック関数clear();  
  37.       
  38.     /**
  39. * キャッシュ変数をロックする
  40. *
  41. * @param string $key キャッシュ インデックス
  42. * @return Cache_Abstract
  43. ​​*/
  44.     抽象的な公開関数ロック($key);  
  45.   
  46.     /**
  47. * キャッシュ変数のロックを解除します
  48. *
  49. * @param string $key キャッシュ インデックス
  50. * @return Cache_Abstract
  51. ​​*/
  52.     抽象的な公開関数のロック解除($key);  
  53.   
  54.     /**
  55. * キャッシュ変数がロックされているかどうかを取得します
  56. *
  57. * @param string $key キャッシュ インデックス
  58. * * @return bool
  59. ​​*/
  60.     抽象的なパブリック関数 isLocked($key);  
  61.   
  62.     /**
  63. * ロックされていないことを確認してください
  64. * * ロック解除を待機するために最大 $tries 回スリープし、タイムアウト後にスキップしてロックを解除します
  65. *
  66. * @param string $key キャッシュ インデックス
  67. ​​*/
  68.     public function checkLock($key) {
  69. If (!$this->isLocked($key)) {
  70. $これを返します
  71. }
  72. $tries = 10;
  73. $ count =
  74. する {
  75. usleep(200);
  76. $count ++;
  77.                                                                                                                                                                  
  78. $this->isLocked($key)
  79. $これを返します
  80. }
  81. }
  82. /**
  83. * APC 拡張キャッシュの実装
  84. *
  85. *
  86. * @category Mjie
  87. * @package キャッシュ
  88. * @著者柳水孟春
  89. * @copyright 著作権 (c) 2008-
  90. * @license 新しい BSD ライセンス
  91. * @version $Id: Cache/Apc.php バージョン番号 2010-04-18 23:02 cmpan $
  92. ​*/
  93. class Cache_Apc extends Cache_Abstract {
  94. 保護された $_prefix = 'cache.mjie.net';
  95. パブリック関数 __construct() {
  96. If (!function_exists('apc_cache_info')) {
  97. 新しいcacheexception( 'APC拡張子はインストールされませんでした');
  98. }
  99. }
  100. /**
  101. * * キャッシュ変数を保存する
  102. *
  103. * * @param string $key
  104. * * @param 混合 $value
  105. * * @return bool
  106. ​​*/
  107. パブリック関数ストア($key, $value) {
  108. return apc_store($this->_storageKey($key), $value);
  109. }
  110. /**
  111. * 読み取りキャッシュ
  112. *
  113. * * @param string $key
  114. * * @return 混合
  115. ​​*/
  116. パブリック関数 fetch($key) {
  117. return apc_fetch($this->_storageKey($key));
  118. }  
  119.       
  120.     /**
  121. * キャッシュをクリアします
  122. *
  123. * @return Cache_Apc
  124. ​​*/
  125.     public 関数 clear() {
  126.         apc_clear_cache();  
  127.         $this を返します。  
  128.     }
  129.       
  130.     /**
  131. * キャッシュユニットを削除します
  132. *
  133. * @return Cache_Apc
  134. ​​*/
  135.     public function delete($key) {
  136.         apc_delete($this->_storageKey($key));  
  137.         $this を返します。  
  138.     }
  139.       
  140.     /**
  141. * キャッシュユニットがロックされているかどうか
  142. *
  143. * * @param string $key
  144. * * @return bool
  145. ​​*/
  146.     パブリック関数 isLocked($key) {
  147.         if ((apc_fetch($this->_storageKey($key) . '.lock')) === false) {
  148.             false を返します。  
  149.         }
  150.           
  151.         true を返します。  
  152.     }
  153.       
  154.     /**
  155. * キャッシュユニットをロック
  156. *
  157. * * @param string $key
  158. * @return Cache_Apc
  159. ​​*/
  160.     パブリック関数ロック($key) {
  161.         apc_store($this->_storageKey($key) . '.lock', '', 5);  
  162.         $this を返します。  
  163.     }
  164.       
  165.     /**
  166. * キャッシュユニットのロックが解除されました
  167. *
  168. * * @param string $key
  169. * @return Cache_Apc
  170. ​​*/
  171.     公開機能のロック解除($key) {
  172.         apc_delete($this->_storageKey($key) . '.lock');  
  173.         $this を返します。  
  174.     }  
  175.       
  176.     /**
  177. *完全なキャッシュ名
  178. *
  179. * * @param string $key
  180. * * @戻り文字列
  181. ​​*/
  182.     プライベート 関数 _storageKey($key) {
  183.         $this->_prefix を返します。 「_」 。 $キー;  
  184.     }
  185. }
  186.   
  187. /**
  188. * ファイルキャッシュの実装
  189. *
  190. *
  191. * @category Mjie
  192. * @package キャッシュ
  193. * @著者柳水孟春
  194. * @copyright 著作権 (c) 2008-
  195. * @license 新しい BSD ライセンス
  196. * @version $Id: Cache/File.php のバージョン番号 2010-04-18 16:46 cmpan $
  197. ​*/
  198. class Cache_File extends Cache_Abstract {
  199.     public $useSubdir = false;  
  200.       
  201.     protected $_cachesDir = 'キャッシュ';  
  202.       
  203.     パブリック関数 __construct() {
  204.         if (定義('DATA_DIR')) {
  205.             $this->_setCacheDir(DATA_DIR . '/cache');  
  206.         }
  207.     }
  208.       
  209.     /**
  210. * キャッシュファイルを取得します
  211. *
  212. * * @param string $key
  213. * * @戻り文字列
  214. ​​*/
  215.     保護された関数 _getCacheFile($key) {
  216.         $subdir = $this->Subdir を使用しますか? substr($key, 0, 2) 。 '/' : '';  
  217.         $this->_cachesDir を返します。 '/' 。 $サブディレクトリ。 $key 。 '.php';  
  218.     }  
  219.   
  220.     /**
  221. * キャッシュ変数を読み取る
  222. ※情報漏洩防止のため、キャッシュファイル形式は「」で始まるphpファイルとなります
  223. * *
  224. * @param string $key キャッシュ インデックス
  225. * * @return 混合
  226. ​​*/
  227.     public function fetch($key) {
  228.         $cacheFile = self::_getCacheFile($key);  
  229.         if (file_exists($cacheFile) && is_readable($cacheFile)) {
  230.             // include 方式
  231.             //return include $cacheFile;  
  232.             // 系列化方式
  233.   
  234.             return unserialize(@file_get_contents($cacheFile, false, NULL, 13));  
  235.         }
  236.   
  237.         false を返します。  
  238.     }
  239.   
  240.     /**
  241. * キャッシュ変数
  242. ※情報漏洩防止のため、キャッシュファイル形式は「」で始まるphpファイルとなります
  243. *
  244. * @param string $key キャッシュ変数の添字
  245. * @param string $value キャッシュ変数の値
  246. * * @return bool
  247. ​​*/
  248.     public function store($key, $value) {
  249.         $cacheFile = self::_getCacheFile($key);  
  250.         $cacheDir = ディレクトリ名($cacheFile);  
  251.   
  252.         if(!is_dir($cacheDir)) {
  253.             if(!@mkdir($cacheDir, 0755, true)) {
  254.                 throw new CacheException("キャッシュディレクトリを作成できませんでした");  
  255.             }
  256.         }
  257.     // include 方式を使用します
  258.         //return @file_put_contents($cacheFile, '
  259.   
  260.         return @file_put_contents($cacheFile, '' . serialize($value));  
  261.     }  
  262.   
  263.     /**
  264. * キャッシュ変数を削除します
  265. *
  266. * @param string $key キャッシュ インデックス
  267. * @return Cache_File
  268. ​​*/
  269.     public function delete($key) {
  270.         if(emptyempty($key)) {
  271.             throw new CacheException("Cache_File::delete() の引数 1 がありません");  
  272.         }
  273.           
  274.         $cacheFile = self::_getCacheFile($key);  
  275.         if(!@unlink($cacheFile)) {
  276.             throw new CacheException("キャッシュファイルを削除できませんでした");  
  277.         }
  278.   
  279.         $this を返します。  
  280.     }
  281.   
  282.     /**
  283. * キャッシュユニットはロックされていますか?
  284. *
  285. * * @param string $key
  286. * * @return bool
  287. ​​*/
  288.     パブリック関数 isLocked($key) {
  289.         $cacheFile = self::_getCacheFile($key);  
  290.         クリアスタットキャッシュ();  
  291.         return file_exists($cacheFile . '.lock');  
  292.     }
  293.   
  294.     /** 
  295.      * 锁定
  296.      *
  297.      * @param 文字列 $key
  298.      * @return Cache_File
  299.      */
  300.     パブリック関数ロック($key) {
  301.         $cacheFile = self::_getCacheFile($key);  
  302.         $cacheDir = ディレクトリ名($cacheFile);  
  303.         if(!is_dir($cacheDir)) {
  304.             if(!@mkdir($cacheDir, 0755, true)) {
  305.                 if(!is_dir($cacheDir)) {
  306.                     throw new CacheException("キャッシュディレクトリを作成できませんでした");  
  307.                 }
  308.             }
  309.         }
  310.   
  311.         // 保存ファイルの保存期間と修正時間を設定します
  312.         @touch($cacheFile . '.lock');  
  313.         $this を返します。  
  314.     }
  315. /** 
  316.      * 解锁
  317.      *
  318.      * @param 文字列 $key
  319.      * @return Cache_File
  320.      */
  321. パブリック関数のロック解除($key) {
  322. $cacheFile = self::_getCacheFile($key);
  323. @unlink($cacheFile . '.lock');
  324. 戻る
http://www.bkjia.com/PHPjc/735086.html

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/735086.html技術記事 PHP キャッシュ実装を送信して、APC およびファイル キャッシュを実装します。 Cache_Abstract を継承することで、サードパーティのキャッシュ ツールを呼び出すことができます。 shindigのキャッシュクラスとapcを参照してください。 PHP コード ?php classCacheE...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。