Redisとのセッションを保存することは安全ですか?


92

現在、MySqlを使用してセッションを保存しています。うまく動作しますが、少し遅いです。

私はRedisの使用を求められましたが、Redisが書き込み操作を遅らせると聞いたので、それが良いアイデアかどうか疑問に思っています。セッションはリアルタイムである必要があるため、少し心配です。

誰かがそのような問題を経験しましたか?


1
Redisはオプションの耐久性があると言っているので、HDDでの永続性を選択した場合は安全に使用できます。ただし、セッションデータについては、必ずRAMに保存します(つまり、試練全体の耐久性の部分については心配しません)。セッションデータを失った場合に発生する最悪の事態は、ユーザーをログアウトさせることです。
NB

1
そうですが、これは私の要件の一部です。ユーザーがログインしていない間(ゲストユーザー)、一部のユーザーデータはセッション全体で保持されるため、ユーザーは再度ログインする必要はありません。彼らはRedis RAMを使用しますが、ロギングやバックアップが有効になっています。一部のセッションを失った場合でも問題ありません。
トレント

1
私の主な懸念は、書き込みの遅延についてです。ユーザーがログインし、セッションが遅延して書き込まれた場合、彼はリダイレクトされますが、ログインされません
Trent

2
eコマースサイトを想像してください。セッションが失われると、現在のカートも失われます。これはひどいことではありませんが、ユーザーにとっては奇妙なことかもしれません。ゲストユーザーはセッションでのみ識別されるため、カートを回復する方法はありません。
BorisGuéry12年

1
@BorisGuéry-同意しないというわけではありませんが、パフォーマンスを向上させる必要がある場合は、何か問題が発生したときに妥協点を設定する必要があります。はい、ユーザーが突然ログアウトするのは奇妙ですが、それは確かです。しかし問題は、どれくらいの頻度で発生することが予想されるかということです。すべてのRedisノードがダウンするのが年に1〜2回の場合、クラスター全体が使用できないときに、数回の孤立した時間でパフォーマンスを低下させる理由はありません。しかし、それは私だけです。
NB

回答:


147

Redisはセッションの保存に最適です。すべての操作はメモリ内で実行されるため、読み取りと書き込みは高速になります。

2番目の側面は、セッション状態の永続化です。Redisは、セッション状態をハードディスクに保持する方法に多くの柔軟性を与えます。あなたはhttp://redis.io/topics/persistenceを通過することができます詳細については、を参照してください。ただし、に、ここにオプションがあります-

  1. セッションを失う余裕がない場合appendfsync alwaysは、構成ファイルで設定します。これにより、Redisは書き込み操作がディスクに保存されることを保証します。欠点は、書き込み操作が遅くなることです。
  2. 1秒分のデータを失うことに問題がなければ、を使用しますappendfsync everysec。これにより、妥当なデータが保証され、優れたパフォーマンスが得られます

14

基本的には、利用可能な2つの主なタイプがあります。非同期スナップとfsync()です。それらはそれぞれRDBおよびAOFと呼ばれます。公式ページの永続化モードの詳細。

デーモン化されたプロセスのシグナル処理は、たとえばSIGTERMを受信したときにディスクと同期するため、再起動後もデータはそのまま残ります。デフォルト設定(RDBスナップショット)でも、整合性が損なわれる前にデーモンまたはOSがクラッシュする必要があると思います。

AOF設定は、サーバーが受信したコマンドをログに記録する追加のみのファイルを使用し、コールドスタート時に保存されたファイルからDBを最初から再作成します。デフォルトのディスク同期ポリシーは毎秒1回(IIRC)フラッシュすることですが、すべてのコマンドでロックして書き込むように設定できます。

スナップショットと増分ログの両方を使用すると、より安全ですがコストのかかる増分ログを使用して、長期的に気にしないでください。Redisはデフォルトでクラスタリングをサポートしているため、レプリケーションも実行できるようです。

私はデフォルトのRDB設定を使用しており、スナップショットをリモートFTPに保存しています。データ損失の原因となる障害はまだ見ていません。急性のハードウェア障害または停電が発生する可能性が最も高いですが、私はVPSでホストされています。それが起こる可能性はわずかです:)


12

この質問は本当にリアルタイムセッションに関するもので、一部には「遅延書き込み操作」というフレーズの誤解が原因で発生したようです。詳細は最終的にコメントで教えられましたが、私はそれを非常に明確にしたかっただけです。 ..

リアルタイムセッションの実装に問題はありません。

Redisは、オプションのディスクへの永続性を備えたメモリ内の Key-Valueストアです。「遅延書き込み操作」とは、メモリ内に存在するデータベースではなく、ディスクへの書き込みを指します。キーと値のペアを設定すると、すぐに(つまり、リアルタイムで)GETできます。永続性に関して選択するポリシー(書き込みを遅らせる量)によって、クラッシュで失われる可能性のあるデータ量の上限が決まります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.