web-dev-qa-db-ja.com

PHPセッションをMemCacheに保存することをお勧めしますか?

ロードバランサーの背後にあるいくつかのWebサーバーで作業しており、スティッキーセッションがユーザーを1つの特定のWebサーバーに保持できるようにすることができます。これは機能します。

PHP Sessions&MemCache。

質問:

  1. memcacheにphpセッションを保持することは可能ですか?
  2. memcacheよりもスティッキーセッションを使用する方が良いですか?
  3. memcacheのphpセッションの問題点-注:十分なキャッシュを取得できます(Amazonは拡張可能です)。
50
Adam

1:はい。そして、PHPセッションをMemcachedに保存することを強くお勧めします。理由は次のとおりです。

Memcachedは、データベースとファイルシステムから頻繁にアクセスされるデータの小さな塊を保存するのに最適です。

Memcachedは、セッション専用に設計されました。もともとはlivejournal.comのリードデベロッパーの発案であり、後にユーザーの投稿のコンテンツをキャッシュするためにも使用されました。その効果はすぐに現れました。ほとんどのアクションはメモリ内で行われていました。ページの読み込み時間が大幅に改善されました。

ありがたいことに、PHPとApacheにはMemcachedとのセッションを処理する簡単な実装があります。いくつかのシェルコマンドでインストールするだけです

debianの例:

Sudo apt-get -t stable install php5-memcached

そして

php.iniの設定を次のようなものに変更します。

http://www.dotdeb.org/2008/08/25/storing-your-php-sessions-using-memcached/ から取得)

 session.save_handler = memcache
 ; change server:port to fit your needs...
 session.save_path="tcp://server:port?persistent=1&weight=1&
timeout=1&retry_interval=15"

キーはsession.save_pathです

サーバー上の相対ファイルパスを指すことはなくなります。 APCが言及されました-APCは、プログラムで使用される.phpファイルのキャッシュ用です。 APCとMemcachedはIOを大幅に削減し、Apacheを画像などのリソースをより速く提供できるようにします。

2:いいえ

3:Memcachedを使用する基本的な欠点は、データのボラティリティです

セッションデータはMemcachedでは永続的ではありません。そのため、サーバーがクラッシュした場合、メモリ内のすべてのデータが失われます。全員が再度ログインする必要があります。

そして、あなたはメモリを消費します...

注意:セッションはメモリに保存されます。 Webサイトが大量の同時ユーザーを処理する場合、より大きなメモリ割り当てのために少し余分にお金を払わなければならない場合があります。

62
FredTheWebGuy

1.はい、memcachedでPHPセッションを保持できます。

Memcache拡張機能には、起動して実行するための設定をほとんど必要としないセッションハンドラーも付属しています。 http://php.net/manual/en/memcached.sessions.php

2. Memcache/Stickyセッション

どちらが「良い」のか本当にわかりません。これは、「依存する」答えの1つになると思います。負荷分散の理由に依存する可能性があります。少数のユーザーがそれぞれ大きな負荷を引き起こす場合、または多数のユーザーがそれぞれ小さな負荷を引き起こす場合。

3. Memcacheの短所

セッションストレージにmemcacheを使用するには、おそらく2つの主な短所があります。

まず、揮発性です。つまり、memcachedインスタンスの1つが再起動/クラッシュした場合、そのインスタンスに保存されたセッションはすべて失われます。一方、従来のファイルベースのセッションを使用していた場合、サーバーが戻ったときにも引き続き存在します。

第二に、おそらくより関連性の高い、memcachedは永続性を保証するものではなく、キャッシュであることのみを目的としています。何らかの理由で、いつでもmemcachedからデータを削除できます。一方、実際には、データがパージされる唯一の理由は、キャッシュがそのサイズ制限に近づいている場合です。最も最近アクセスされたデータは追放されます。繰り返しますが、これは問題ではないかもしれません。セッションが古い場合、ユーザーはおそらくいなくなるでしょうが、それはあなたのニーズに依存します。

7
Brenton Alker

セッション制御に「memcache」ではなく「memcacheD」拡張機能(2つの異なる拡張機能があります)を使用する場合は、変更に注意する必要がありますphp.ini

GoogleのほとんどのWebリソースは、memcacheDよりも前のバージョンであるため、memcacheに基づいています。彼らは次のように言うでしょう:

session.save_handler = memcache session.save_path = "tcp:// localhost:11211"

しかし、memcacheDに関しては無効です。

Php.iniを次のように変更する必要があります。

session.save_handler = memcached session.save_path = "localhost:11211"

プロトコル識別子はありません。

From: http://php.net/manual/en/memcached.sessions.php#99646

4
ribluc

私の観点では、セッションをMemcachedに保存することはお勧めしません。セッションが消えた場合、ユーザーはしばしばログアウトされます。 memcachedサイト、「memcachedは本質的に汎用の高性能な分散メモリオブジェクトキャッシングシステムですが、データベースの負荷を軽減することにより動的なWebアプリケーションを高速化するために使用することを目的としています。」 Memcachedサーバーでデータが見つからない場合にデータを取得するフォールバックメカニズム。

2
indika