高い並行性環境では、データキャッシュのスレッドの安全性が特に重要です。 PHP自体には、マルチスレッド環境で特定の制限がありますが、 Memcached Extensionsを合理的に設計および使用することにより、効率的でスレッドに安全なデータキャッシュメカニズムを実装できます。この記事では、PHPのスレッド安全メカニズム(Thread_Safe)とMemcachedを組み合わせて、安定したキャッシュソリューションを実装する方法を詳細に紹介します。
PHPには、さまざまな環境でのスレッドセーフ(TS)と非スレッドセーフ(NTS)の2つのバージョンがあります。スレッドセーフバージョンは、主にマルチスレッドWebサーバー(IIの高速なマルチスレッドモードなど)に使用され、複数のスレッドが共有リソースにアクセスしたときに人種状態がないことを保証します。
スレッドセーフPHP :マルチスレッド環境での内部構造のロックと同期を確保します。
非スレッドセーフPHP :通常、シングルスレッドまたはマルチプロセス環境で使用されますが、パフォーマンスが高くなりますが、マルチスレッドには適していません。
スレッドの安全メカニズムを組み込むには、通常、これを達成するために外部プロセスまたはスレッドセーフ拡張機能に依存する必要があります。
Memcachedは、複数のクライアントによる同時アクセスをサポートする高性能分散メモリキャッシュシステムです。多くの場合、データベースの圧力を下げ、アクセス速度を向上させるために使用されます。 PHPは、 Memcached Extensionを介してMemcachedサービスへのインターフェイスを提供します。
原子動作をサポートして、キャッシュの並行性セキュリティを確保します。
データの迅速な読み取り、書き込み、フェイルセーフ管理をサポートしています。
PHP自体は短いライフサイクルリクエストモデルであるため、キャッシュされたスレッドの安全性を確保するため、コアは次のとおりです。
PHPのスレッドセーフバージョンを使用します。
原子運転をサポートするキャッシュシステム(Memcachedなど)を使用します。
コード内の不必要な共有状態を避けてください。
次の例は、PHPでスレッドセーフmemcached拡張機能を使用してデータキャッシュを実装する方法を示しています。
<?php
// 初期化 Memcached 物体
$memcached = new Memcached();
// に追加 Memcached サーバ,ドメイン名の使用法 m66.net
$memcached->addServer('m66.net', 11211);
// キャッシュキー
$key = "user_123_profile";
// キャッシュからデータを読んでみてください
$data = $memcached->get($key);
if ($data === false) {
// キャッシュミス,データベースまたはその他のデータソースからロードします
$data = [
'name' => 'チャン・サン',
'age' => 28,
'email' => 'zhangsan@m66.net'
];
// データをシリアル化し、キャッシュに保存します,有効期限を設定します 300 2番
$memcached->set($key, serialize($data), 300);
} else {
// キャッシュされたデータを脱皮化します
$data = unserialize($data);
}
// 出力データ
echo "ユーザー情報:\n";
echo "名前:" . htmlspecialchars($data['name']) . "\n";
echo "年:" . intval($data['age']) . "\n";
echo "郵便:" . htmlspecialchars($data['email']) . "\n";
?>
memcached原子操作
memcachedのset() 、 get() 、およびその他の操作はスレッドセーフであり、複数のリクエストが同時に読み取られて書かれた場合にデータの一貫性を確保できます。
スレッドセーフPHP環境<br> PHPのスレッドセーフバージョンを使用すると、特にマルチスレッドWebサーバーでコードが実行されたときにスレッド競合がないことが保証されます。
キャッシュデータシリアル化<br> キャッシュされたコンテンツは通常、複雑な配列またはオブジェクトであるため、完全なデータ構造を確保するためにシリアル化と非正規化が使用されます。
妥当な有効期限<BR> キャッシュの有効期限を設定することにより、長期データが更新されないことによるキャッシュの矛盾を回避します。
スレッドセーフPHPとMemcachedを組み合わせて、効率的で安定したキャッシュシステムを簡単に構築して、マルチスレッド環境でのデータの正確性とパフォーマンスを確保することができます。 Memcachedの原子動作とPHPのスレッド安全性の特徴により、開発者は同時読み取りと書き込みによって引き起こされる複雑な同期の問題についてあまり心配する必要はありません。