Web 開発では、データベースの時間のかかる操作をキャッシュすることがよくありますが、キャッシュが失敗した瞬間に、大量のアクセスがキャッシュ失敗の通知を受け取り、すべてバックエンドにアクセスしてデータベースにクエリを実行する可能性があります。 、その結果、同時に多数のデータベースが実行され、時間のかかるクエリがデータベースのダウンタイムなどの問題を引き起こす可能性があります。この問題は深く隠されており、見つけるのが困難です。このプロジェクトは主に PHP のプロセス間ロック問題を解決するために使用されます。
例:
コードをコピーします コードは次のとおりです:
/**
* テスト例、同時に 2 ページを開くと、常に 1 ページだけが同時にロック範囲に入ることができるコードを見つけることができます
* @link http://code.google.com/p/phplock/
* @author sunli
* @svnversion $Id: test.php 2 2009-11-24 07:14:27Z sunli1223 $
* @version v1.0 beta1
* @license Apache ライセンス バージョン 2.0
* @copyright sunli1223@ gmail.com
*/
require 'class.phplock.php';
$lock = new PHPLock ( 'lock/ ', 'lockname' );
$lock->startLock ();
//プロセスコード
echo "Enter lock $lock->unlock ();
$lock->endLock ();
echo "ロックの解除が完了しました
rn";
function getCache( $key) {
$cache を返す
}
/**
* キャッシュ操作
*
* @return $array
*/
function setCache($key,$value) {
}
$cache=getCache($key); ) {
//キャッシュが存在しないため、ロックを開始します
$lock = new PHPLock ('lock/', $key);
$lock->startLock (); // キャッシュにデータがあるかどうかを判断します。キャッシュを再構築するためのアクセスがあった可能性があるため、データベースを再度クエリする必要はありません
$cache=getCache()
if(!$cache){
;使用する 使用する 使用するdbdata;
setCache($key,$data)
}
// ロックを解除する
$lock->endLock (); ;
}
?>
関連記事
PHP プロセス ロックの問題の分析と研究
http://www.bkjia.com/PHPjc/320818.html
www.bkjia.com
本当
http://www.bkjia.com/PHPjc/320818.html
技術記事
Web開発では時間のかかるデータベースの操作をキャッシュすることが多いのですが、キャッシュが無効になった瞬間に大量のアクセスでキャッシュ無効の表示が出るという罠があるかもしれません…
。