PHP には、php memcache と php memcached の 2 つの memcache クライアントがあります。
php memcache は PHP で独立して実装されています。私たちの実践から、多くの問題があり、設定できる関数や属性もほとんどないことがわかりました。ネイティブ C ではより完全なため、php memcached に置き換えることをお勧めします。
1.1 配布の問題
php memcacheはデフォルトでインスタンスを自動的に切り替えるため、古いデータが取得され、値が不安定になることがあります。
ネチズンからの質問:
最近、ある製品の作業中に小さな問題に遭遇しました。その現象は 2 つの分散型 memcached サーバーを使用していました。場合によっては、特定のカウンターによって取得された数値が正しくなく、最終的には php memcache クライアントのフェイルオーバー メカニズム上で特定されることがあります。
memcached 分散環境では、ハッシュ計算を通じて特定のキーが特定の memcached に割り当てられることがわかっています。
php.ini で memcache.allow_failover = 1 の場合、分散環境では、1 つの memcached に問題があると、自動的に他の memcached が試行され、上記の問題が発生します。したがって、allow_failover = 0 を設定する必要があります。そうすることで、取得できない場合は、他の MCS から取得するのではなく、直接失敗を返すようになります。これにより、頻繁に切り替える場合に、ネットワーク例外やサーバー側の例外が発生した場合に古いデータを取得することを回避できます。インスタンスを削除すると、古いデータが取得されます。
Sina Weibo で言及された教訓:
php memcache を php memcached に置き換えると、同時実行性が高い場合の安定性が大幅に向上します
さらに、より多くの機能とより正確なエラーコードが追加されています。
マルチレベル キャッシュ。一部のキャッシュ ノードがダウンした場合の影響を軽減し、読み取りと書き込みの両方をキャッシュします。
memcached API を libmemcached に置き換えます (memcached への多言語アクセスに便利で、次のようなさまざまなルールを許可します)。 )
php memcache クライアントには 1 秒のタイムアウト間隔があり、変更できません:
bool Memcache::connect ( string $host [, int $port [, int $timeout ]] )
3 番目のパラメーターは元々タイムアウトを秒単位で設定できますが、変更することはできません。
タイムアウトを変更する次の 3 つの方法はテストされていますが、すべて無効です:
1.3.1. Memcache API Memcache::setServerParams は変更できません。
1.3.2. memcache ソース コードの変更 vi php_memcache.h マクロ定義は変更できません。
1.3.3 . php.ini のこの設定:default_socket_timeout = 60 は、このタイムアウトでは無効です。
古いクライアントである Php memcache には、プロパティ設定がほとんどありません。
エラーコードの粒度が非常に粗いため、いくつかの機能が欠けています。
主に 2 人の顧客の PHP に使用されます。 1 つは古い、より広範な PECL/キャッシュであり、もう 1 つは新しい、めったに使用されない、より機能が豊富な PECL/キャッシュです。
基本、値の設定、値の取得、増分、減分、データの取得などの複数のサーバーをサポートします。
ここでは、さらに高度な機能と情報をいくつか紹介します。
りー