Redis(2.6)の現在のリリースブランチ 、アイテムの有効期限が切れたときに通知を受け取ることはできません。おそらく次のバージョンで変更されるでしょう。
それまでの間、要件をサポートするには、有効期限通知サポートを手動で実装する必要があります。だからあなたは:
session:<sessionid> -> a hash storing your session data - one of the field is <userid>
user:<userid> -> a set of <sessionid>
sessionid
を削除する必要があります セッションの有効期限が切れたときに設定されたユーザーから。したがって、スコアがタイムスタンプである追加のソート済みセットを維持できます。
ユーザー100のセッション10を作成する場合:
MULTI
HMSET session:10 userid:100 ... other session data ...
SADD user:100 10
ZADD to_be_expired <current timestamp + session timeout> 10
EXEC
次に、zsetをポーリングして、期限切れになるセッションを識別するデーモンを構築する必要があります(ZRANGEBYSCORE
)。期限切れのセッションごとに、データ構造を維持する必要があります。
- セッションをzsetからポップします(
ZREMRANGEBYRANK
) - セッションユーザーIDを取得します(
HMGET
) - セッションを削除します(
DEL
) - ユーザーIDセットからセッションを削除します(
SREM
)
主な問題は、デーモンがアイテムをポーリングして処理するときに競合状態が発生しないようにすることです。この質問に対する私の回答を参照して、実装方法を確認してください。
redisに基づいてセッションの有効期限を処理する方法は?