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
rn"; ob_end_flush();
ob_flush();
sleep ( 5 ); // 同時実行をシミュレートします
$lock->unlock ();
$lock->endLock ();
echo "ロック解除完了
rn";
function getCache($key) {
return $cache; }
/**
* キャッシュ操作
*
* @return $array
*/
function setCache($key,$value) {
}
$cache=getCache($key);
if (! $cache) {
//キャッシュが存在しません, ロックを開始します
$lock = new PHPLock ( 'lock/', $key );
$lock->startLock ();キャッシュ、おそらくキャッシュを再構築するためのアクセスがすでに存在しているため、データベースを再度クエリする必要はありません
$cache=getCache(){
if(!$cache){
//データベースクエリ操作、コードは省略されています
$data=$dbdata;
//ロックを解除します
$lock->endLock ();
その他の関連記事については、PHP 中国語 Web サイト (www.php.cn) に注目してください。