ホームページ  >  記事  >  バックエンド開発  >  php memcache と php memcached および発生した問題

php memcache と php memcached および発生した問題

高洛峰
高洛峰オリジナル
2016-11-29 10:30:231190ブラウズ

PHP には、php memcache と php memcached の 2 つの memcache クライアントがあります。
php memcache は PHP で独立して実装されています。私たちの実践から、多くの問題があり、設定できる関数や属性もほとんどないことがわかりました。ネイティブ C ではより完全なため、php memcached に置き換えることをお勧めします。

1. Php memcacheの問題

1.1 配布の問題
php memcacheはデフォルトでインスタンスを自動的に切り替えるため、古いデータが取得され、値が不安定になることがあります。
ネチズンからの質問:
最近、ある製品の作業中に小さな問題に遭遇しました。その現象は 2 つの分散型 memcached サーバーを使用していました。場合によっては、特定のカウンターによって取得された数値が正しくなく、最終的には php memcache クライアントのフェイルオーバー メカニズム上で特定されることがあります。
memcached 分散環境では、ハッシュ計算を通じて特定のキーが特定の memcached に割り当てられることがわかっています。
php.ini で memcache.allow_failover = 1 の場合、分散環境では、1 つの memcached に問題があると、自動的に他の memcached が試行され、上記の問題が発生します。したがって、allow_failover = 0 を設定する必要があります。そうすることで、取得できない場合は、他の MCS から取得するのではなく、直接失敗を返すようになります。これにより、頻繁に切り替える場合に、ネットワーク例外やサーバー側の例外が発生した場合に古いデータを取得することを回避できます。インスタンスを削除すると、古いデータが取得されます。

1.2 同時実行性が高い場合の安定性の問題

Sina Weibo で言及された教訓:
php memcache を php memcached に置き換えると、同時実行性が高い場合の安定性が大幅に向上します
さらに、より多くの機能とより正確なエラーコードが追加されています。

Twitter のキャッシュ エクスペリエンス

マルチレベル キャッシュ。一部のキャッシュ ノードがダウンした場合の影響を軽減し、読み取りと書き込みの両方をキャッシュします。
memcached API を libmemcached に置き換えます (memcached への多言語アクセスに便利で、次のようなさまざまなルールを許可します)。 )

1.3 1 秒のタイムアウト間隔は変更できません

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 は、このタイムアウトでは無効です。

2. memcache と memcached の比較

古いクライアントである Php memcache には、プロパティ設定がほとんどありません。
エラーコードの粒度が非常に粗いため、いくつかの機能が欠けています。
主に 2 人の顧客の PHP に使用されます。 1 つは古い、より広範な PECL/キャッシュであり、もう 1 つは新しい、めったに使用されない、より機能が豊富な PECL/キャッシュです。

基本、値の設定、値の取得、増分、減分、データの取得などの複数のサーバーをサポートします。

ここでは、さらに高度な機能と情報をいくつか紹介します。

りー

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。