ホームページ >データベース >Redis >Redis 設定の生存時間と有効期限の原理分析

Redis 設定の生存時間と有効期限の原理分析

WBOY
WBOY転載
2022-08-30 13:51:182405ブラウズ
#推奨学習:

Redis ビデオ チュートリアル

原理を理解する前に、その使用方法を見てみましょう

EXPIRE コマンドまたは PEXPIRE コマンドを通じて、クライアントはデータベース内の特定のキーの生存時間を秒またはミリ秒の精度で設定できます。指定された秒数またはミリ秒数が経過すると、サーバーは生存時間 が指定されたキーを自動的に削除します。 0.

SETEX コマンドは、文字列キーの設定中にキーの有効期限を設定できます (文字列キーにのみ使用できます)

EXPIRE コマンドを使用するPEXPIRE コマンドも同様です。クライアントは、EXPIREAT コマンドまたは PEXPIREAT コマンドを使用して、データベース内のキーの有効期限を秒またはミリ秒の精度で設定できます。

有効期限は UNIX タイムスタンプです。キーの有効期限が来ると、サーバーはデータベースからキーを自動的に削除します。

#TTL コマンドと PTTL コマンドは、生存時間または有効期限を持つキーを受け入れます。 、キーの残りの生存時間を返します。つまり、キーがサーバーによって自動的に削除されるまでにかかる時間を返します。

Redis には 4 つあります。キーの生存時間 (キーが存在できる期間) または有効期限 (キーがいつ削除されるか) を設定するために使用できるさまざまなコマンド:

EXPIRE
  • PEXPIRE コマンドは、キーの有効期間を ttl ミリ秒に設定するために使用されます。
  • EXPIREAT コマンドは、キーの有効期限をタイムスタンプで指定された秒単位でタイムスタンプに設定するために使用されます。
  • PEXPIREAT コマンドは、キーの有効期限をタイムスタンプで指定されたミリ秒単位でタイムスタンプに設定するために使用されます。
  • 原則

    設定コマンドにはさまざまな単位やさまざまな形式がありますが、実際には、EXPIRE、PEXPIRE、および EXPIREAT の 3 つのコマンドはすべて PEXPIREAT コマンドを使用して実装されます。

    上記の 4 つのコマンドのどれがクライアントによって実行されたとしても、変換後の最終的な実行結果は PEXPIREAT コマンドを実行した場合と同じになります。

    redisDb 構造の Expires ディクショナリは、データベース内のすべてのキーの有効期限を保存します。このディクショナリを Expires ディクショナリと呼びます。辞書の有効期限はポインターであり、このポインターはキー空間内のキーオブジェクト (つまり、データベースキー) を指します。

    有効期限ディクショナリの値は、long long 型の整数です。この整数には、キーが指すデータベース キーの有効期限 (ミリ秒精度の UNIX タイムスタンプ) が格納されます。

    次の図は、期限切れの辞書を含むデータベースの例を示しています。この例では、キー スペースにはデータベース内のすべてのキーと値のペアが格納されますが、期限切れの辞書はデータベースに保存されます。データベースキーの有効期限を格納します。

    表示の便宜上、図のキー空間と有効期限辞書では、アルファベット キー オブジェクトとブック キー オブジェクトが 2 回繰り返されています。実際には、キー スペースのキーと有効期限ディクショナリのキーは同じキー オブジェクトを指すため、重複するオブジェクトは存在せず、スペースが無駄になることはありません。

    図の期限切れの辞書には 2 つのキーと値のペアが保存されています。

    最初のキーと値のペアのキーは次のとおりです。 alphabet キー オブジェクトの値は 1385877600000 です。これは、データベース キー アルファベットの有効期限が 1385877600000 (2013 年 12 月 1 日 0:00) であることを意味します。 2 番目のキーと値のペアのキーはブック キー オブジェクトで、値は 1388556000000 です。これは、データベース キー ブックの有効期限が 1388556000000 (2014 年 1 月 1 日 0:00) であることを意味します。 。クライアントが PEXPIREAT コマンド (または PEXPIREAT コマンドに変換される他の 3 つのコマンド) を実行してデータベース キーの有効期限を設定すると、サーバーは指定されたデータベース キーと有効期限をデータベースの有効期限ディクショナリに関連付けます。

    サーバーが次のコマンドを実行した後

    期限切れの辞書はキーと値のペアを追加します。ここで、キーはメッセージ キー オブジェクト、値は 1391234400000 (2014 年 2 月 1 日の 0:00) です。図

    以下はPEXPIREATコマンドの擬似コード定義です

    PERSISTコマンドは有効期限を削除できますキーの

    PERSIST コマンドは、PEXPIREAT コマンドの逆の操作です。PERSIST コマンドは、有効期限ディクショナリで指定されたキーを検索し、キーと値 (有効期限) の関連付けを解除します。時間)を有効期限ディクショナリに登録します。

    期限切れのキーの判定

    プログラムは、期限切れ辞書を通じて、次の手順を使用して、指定されたキーの期限が切れているかどうかを確認できます。

    1) 指定されたキーが期限切れであるかどうかを確認します。有効期限辞書に存在します : 存在する場合は、キーの有効期限を取得します。

    2) 現在の UNIX タイムスタンプがキーの有効期限より大きいかどうかを確認します。そうである場合は、キーの有効期限が切れています。そうでない場合は、キーの有効期限が切れていません。このプロセスは疑似コードで記述できます:

    有効期限が 1385877600000 (2013 年 12 月 1 日 0:00) のキー アルファベットの場合:

    現在時刻が 1383282000000 (2013 年 11 月 1 日 0:00) の場合、is_expired(alphabet) を呼び出すと、現在時刻がアルファベット キーの有効期限よりも小さいため、False が返されます。

    一方、現在時刻が 1385964000000 (2013 年 12 月 2 日 0:00) の場合、is_expired(alphabet) を呼び出すと True が返されます。これは、現在時刻がアルファベットの有効期限よりも大きいためです。鍵。

    推奨される学習: Redis ビデオ チュートリアル

    以上がRedis 設定の生存時間と有効期限の原理分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

  • 声明:
    この記事はjb51.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。