Redis EXPIRE ハッシュキー

Redis Expire Hasshuki



Redis ハッシュは、JSON オブジェクト、Java HashMap、または Python ディクショナリに非常によく似た特別な種類のデータ型です。さらに、ドメイン オブジェクトのモデル化に使用できるフィールドと値のペアのコレクションです。 Redis ハッシュ データ構造は、各ハッシュ キーが最大 40 億のフィールドと値のペアを格納できる、非常にメモリ効率の高いものです。最も重要なことは、HSET、HGET、HMGET などの基本的なハッシュ操作は、一定の時間の複雑さで動作することです。


Redis ハッシュ キーには無限の存続時間 (TTL) があります。つまり、永続的であることを意味し、DEL などのコマンドを使用して明示的に削除されます。この記事では、EXPIRE コマンドを使用して Redis ハッシュの TTL を設定することに焦点を当てます。







Redis EXPIRE コマンド

EXPIRE コマンドは、Redis ハッシュ、セット、リストなどの特定のキーにタイムアウトを設定するために使用されます。タイムアウトが期限切れになると、Redis キーはデータベースから削除されます。最も重要なことは、キーの内容が削除または上書きされるまでタイムアウトがクリアされないことです。キーに関連付けられた値を変更しても、有効期限には影響しません。



EXPIRE コマンドの構文は次のとおりです。



EXPIRE キー expiry_time_seconds [ NX | | GX | | GT | | LT ]


鍵: タイムアウトを設定する必要がある Hash、List、または Set のキー。





expirty_time_seconds: 秒単位のタイムアウト値。

EXPIRE コマンドでは、いくつかのオプションの引数が受け入れられます。



NX: タイムアウト値は、指定されたキーがまだ有効期限切れでない場合にのみ設定されます。

XX: 指定されたキーに既存のタイムアウト値がある場合、新しい有効期限が設定されます。

GT: 新しいタイムアウト値が既存の値より大きい場合、新しい有効期限が設定されます。

LT: 既存の値が新しい値より大きい場合、新しいタイムアウト値が設定されます。

最も重要なことは、EXPIRE コマンドが一定の時間計算量で動作することです。コマンドの実行が成功すると、整数 1 が返されます。引数が間違っているかキーが存在しないために操作が失敗した場合は、0 が返されます。

次のセクションに示すように、ハッシュに EXPIRE コマンドを使用して有効期限を設定します。

EXPIRE コマンドを使用して Redis ハッシュを期限切れにする

ユーザーごとのセッション情報が Redis ハッシュに格納されているとします。 セッション:ID:1000:ユーザー:10。 次のように、HMSET コマンドを使用して、複数のフィールドと値のペアを持つ Redis ハッシュを作成できます。

hmset セッション:id: 1000 :ユーザー: 10 ユーザー名 'ジェー' クッキー 'はい' パスワード 「389Ysu2」


HGETALL コマンドを使用して、作成されたハッシュを調べてみましょう。

hgetall セッション:id: 1000 :ユーザー: 10



さらに、ユーザーが 60 秒以上アイドル状態の場合、セッションは 10 秒後に期限切れになります。セッションの有効期限は、セッション情報を格納するハッシュの有効期限を設定することによって実現されます。

次のように EXPIRE コマンドを使用できます。

セッションを期限切れにする:ID: 1000 :ユーザー: 10 10


前述のとおり、タイムアウト値は 10 秒に設定されています。


予想どおり、戻り値は 1 です。これは、ハッシュの TTL が正常に設定されたことを意味します。ハッシュキーが Redis ストアから削除されるまでの時間を確認してみましょう。 TTL コマンドは次のように使用できます。

ttl セッション:ID: 1000 :ユーザー: 10



出力に示されているように、ハッシュが自動的に削除されるまでに 3 秒かかります。 10 秒後、TTL コマンドの出力は次のようになります。


-2 整数の応答が示されているため、ハッシュは存在しません。

有効期限の存在に基づいてタイムアウトを設定する

EXPIRE コマンドは NX および XX 引数を受け入れ、指定されたハッシュの有効期限の存在に基づいて新しいタイムアウトを設定します。で新しいハッシュを作成しましょう タイムアウトなし .

hmset noTimeOut 名 'テスト'


前のハッシュに新しい有効期限を設定してみましょう。さらに、XX 引数を EXPIRE コマンドにも渡します。

noTimeOut を期限切れにする 15 XX


を指定しておりますので、 XX コマンドのオプションでは、有効期限は設定されません。 XX オプションでは、指定されたハッシュ キーに関連付けられた既存のタイムアウトがない場合、新しい有効期限を設定できません。


私たちが使用する場合 NX オプションでは、タイムアウト値は 15 に設定されます。

noTimeOut を期限切れにする 15 NX



EXPIRE コマンドは整数 1 の応答を返します。これは、タイムアウトが適切に設定されていることを意味します。

既存のタイムアウト値に基づいてタイムアウトを設定する

GT および LT オプションを使用して、既存のタイムアウトの長さに基づいてハッシュの有効期限を設定できます。

という新しいハッシュを作成しましょう ハッシュウィズタイムアウト。

hmset hashWithTimeout フィールド 1 値 1


次に、ハッシュの有効期限を 200 秒に設定します。

hashWithTimeout を期限切れにする 200


次のように、GT オプションとともにハッシュに 100 秒の新しいタイムアウトを設定してみましょう。

hashWithTimeout を期限切れにする 100 GT


GT オプションが指定されているため、EXPIRE コマンドは、新しいタイムアウト値が既存の値よりも大きいかどうかを確認し、新しい有効期限を設定します。この例では、新しいタイムアウトは既存のタイムアウトより大きくありません。したがって、コマンドは新しい有効期限を設定せず、0 が返されます。


GTの代わりにLTオプションを使用しましょう。新しい有効期限は現在の有効期限よりも短いため、次のコマンドは新しいタイムアウトを正常に設定する必要があります。

hashWithTimeout を期限切れにする 100 LT


結論

つまり、Redis EXPIRE コマンドを使用して、特定のキーの TTL 値を設定します。デフォルトでは、Redis ハッシュ キーは、非揮発性と呼ばれるタイムアウトに関連付けられていません。説明したように、EXPIRE コマンドは、Redis ハッシュにタイムアウト値を設定するために使用されます。通常、タイムアウト値として指定された時間が経過すると、Redis データ ストアからハッシュが削除されます。例に示すように、EXPIRE コマンドは、条件に基づいてハッシュの有効期限を設定するために、XX、NX、GT、および LT などのオプションの引数を受け入れます。