24

ユーザーがログインしているかどうかを追跡するために PHP のセッションを使用しています。ユーザーに関するその他のデータを保存するためにセッションを使用することはありません。基本的には、ユーザーが認証されているかどうかを確認するためにハッシュ テーブルをチェックするようなものです。

ネイティブ PHP セッションの代わりに redis を使用する利点はありますか?

パフォーマンス、スケーラビリティ、およびセキュリティに興味があります (コードの複雑さにはあまり関心がありません)。

4

3 に答える 3

25

セッションを保存するために Redis のようなものを使用することは、負荷分散されたサーバーからより多くのパフォーマンスを得る優れた方法です。

たとえば、Amazon Web Services では、ロード バランサーには「スティッキー セッション」と呼ばれるものがあります。これが意味することは、ユーザーが最初に Web アプリに接続するとき、たとえばログインするとき、ロード バランサーはアプリ サーバーの 1 つを選択し、このユーザーはアプリケーションを終了するまでこのサーバーからサービスを受け続けるということです。これは、たとえば PHP で使用されるセッションが、最初に使用を開始したアプリ サーバーに保存されるためです。

ここで、別のサーバーで Redis を使用し、アプリケーション サーバーのそれぞれで PHP を構成して、そのセッションを Redis に保存する場合、この「スティッキー セッション」をオフにすることができます。これは、任意のサーバーがセッションにアクセスできることを意味するため、ユーザーはアプリへのすべてのリクエストで別のサーバーからサービスを受けます。これにより、最終的に負荷分散設定をより効率的に使用できるようになります。

于 2014-11-02T18:05:22.313 に答える
0

膨大な量のトラフィックを取得し、PHP がセッションを適切に処理し、その小さなデータのみを保存する場合を除いて、セッションについてあまり心配する必要はないと思います。多くのリクエストがあっても問題なく、パフォーマンスについてはredis は PHP ネイティブではないため、近いはずです。

10,000 ユーザーの場合、各ユーザーが 1kb のセッション データを使用すると、10,000kb または 10~mb を消費しますが、これはそれほど多くはありません。PHP は十分に優れたデータ構造を使用して、これらの値を保持し、すばやく読み書きできるほどスマートです。問題は、セッション データが大きすぎる場合、または何らかの理由でサーバーがセッション データを読み取るために消費するリソースが多すぎる場合ですが、それは通常、データが大きすぎる場合です。

于 2012-04-09T17:09:59.280 に答える