sql >> データベース >  >> NoSQL >> Redis

Redis、セッションの有効期限、および逆引き参照

    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に基づいてセッションの有効期限を処理する方法は?



    1. MongoDB:クエリを正規化できません:BadValueプロジェクションに包含と除外を混在させることはできません

    2. MongoDBの.updateOneがNode.jsで機能しない

    3. 時系列をredisに保存する

    4. MongoDBのサブドキュメントのすべてのフィールドを合計するにはどうすればよいですか?