6

Digg やその他のトラフィックの多い Web サイトは、ユーザー セッションをどのように保存していますか? ユーザーセッションを保存するために何を使用しますか? ファイルシステム、DB (どれ?)、memcache、またはその両方?

簡単な状況を想像してみましょう。ログに記録されたユーザーは、ログイン中にフラグ「Remember me」を設定しました。有効期限が 1 年のセッション Cookie を設定しました。たとえば、セッションをmemcacheに保持していますが、このセッションの記録をDBにも保持する必要があります(私のバージョンでは)。「Remember me」フラグを持つユーザーのみが DB に保存されます。セッションを保存する正しい方法ですか?もちろん、トラフィックの多い Web サイト (2 つ以上のアプリケーション サーバー、2 つ以上のデータベース、memecache サーバーなど) を意味します。デフォルトの方法でセッションを保存する小さなWebサイトでは(ファイルシステムに)問題ありません。

私はグーグルで検索しようとしましたが、それに関する情報を見つけることができませんでした。「高度なPHPプログラミング」の本からいくつかの解決策を読みましたが、主なアクセントはセッション格納ハンドラーのカスタマイズにありました。

良いアイデアやリンクをお待ちしております。

ありがとうございました。

4

3 に答える 3

6

Alix の回答に加えて、この記事をチェックアウトすることに興味があるかもしれません。

短い抜粋:

Memcached をセッション ストアとして使用した理由:

Digg v3 のロールアウト直後、非冗長 MySQL セッション ストア ハードウェアがクラッシュしました。これにより、Digg が停止しました。そのような場合、MySQL ではなく Memcached にセッションを配置する (簡単な) 変更をロールバックして、それがどのように機能するかを確認することを常に計画していました。


では、セッションのたびにデータベースにアクセスする前は?

はい。

MySQL は、セッションを処理するために行われる挿入と選択に十分対応できました。私たちの問題は、実際には古いセッションをクリアすることでした。古いセッションを削除するスクリプトは、セッション データベースを過負荷にしないようにかなり洗練されていますが、依然として影響を受けていました。

Memcached は、MySQL よりも少ないオーバーヘッドで期限切れのセッションを削除すると推測しています。


[memcachedの前に]セッションにInnoDBを使用しました。テーブルまたは行レベルのロックではありませんでした。それはOSレベルの競合でした。MySQL の前に Memcached を使用すると、負荷が軽減され、管理スクリプトがその作業を実行できるようになりますが、疑問が浮き彫りになります。不揮発性セッションは必要ありませんし、望んでもいません。(読者への重要な注意: 不揮発性セッションが必要な場合や、必要な場合があります)。

「なぜ MySQL が memcached の背後にあるのですか?」... 「不揮発性セッションは必要ありませんし、必要ありません」.

于 2010-01-18T01:08:51.257 に答える
5

それらは、memcachedまたは同等のものを使用していることは間違いありません。

于 2010-01-18T00:46:39.567 に答える
0

私の実装は、ユーザーが私を覚えているをクリックすると、別の Cookie を配置してランダムな値を割り当てることです。

ログに記録されていないユーザーから、その Cookie をチェックします。db エントリとも一致するものが存在する場合は、ログインしてセッションを開きます。

共有ホスティングを使用していない場合、memcache に保存することは素晴らしいことです :)

于 2011-03-27T12:49:23.640 に答える