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