ホームページ データベース Redis Redis の生存時間の設定

Redis の生存時間の設定

Mar 26, 2020 am 09:41 AM
redis

Redis の生存時間の設定

Redis はキーの生存時間を提供します。生存時間が指定されていない場合、生存時間は永続的になります。 Redis は、時間が経過するとこのキーを自動的に削除します。 EXPIRE コマンドを使用できます。時間の単位は秒です。キーの生存時間が制限されている場合、SET キーが再割り当てされると、キーは再び永続的に設定されます:

SET session:captcha sd2a
EXPIRE session:captcha 600
ログイン後にコピー

生存期間をキャンセルするキーの有効期間が永続に設定されており、これは PERSIST:

PERSIST session:captcha
ログイン後にコピー

TTL コマンドを使用してキーの有効期間を表示します。-1 は永続、または有効期限が切れると削除されることを意味します。

TTL session:captcha
ログイン後にコピー

Redis の INCR、LPUSH、HSET、ZREM およびその他のコマンドでは、生存時間は変更されません。

(推奨: redis ビデオ チュートリアル )

時間をミリ単位で正確に管理したい場合は、PEXPIRE が必要で、残り時間を確認するには PTTL を使用します。

有効期限が切れる秒数ではなく、有効期限を指定したい場合はどうすればよいでしょうか? EXPIREAT と PEXPIREAT が必要です。 EXPIREAT のパラメータは有効期限のタイムスタンプ (秒)、PEXPIREAT のパラメータはタイムスタンプの有効期限 (ミリ秒) です。

SET session:captcha sd2a
EXPIREAT session:captcha 1399902009
PEXPIREAT session:captcha 1399902009000
ログイン後にコピー

アプリケーション シナリオ 1: アクセス頻度制限: 各ユーザーを 1 分に制限します。 10ページを閲覧します。疑似コードは次のとおりです。

$isExists = EXISTS limit:user1:192.168.1.2
if($isExists){
    $num = INCR limit:user1:192.168.1.2
    if($num > 10){
        print '超过限制'
        exit
    }
}else{
    MULTI
    INCR limit:user1:192.168.1.2
    EXPIRE limit:user1:192.168.1.2 60
    EXEC
}
ログイン後にコピー

トランザクションを使用する理由は、INCR limit:user1:192.168.1.2 を実行した後、EXPIRE limit:user1:192.168.1.2 60 を実行する前に、クライアントがクローズとして追加されるためです。その後、キーと値は永続化されます。そして、このIDは一生に10回しかアクセスできません。それは残念です。

アプリケーション シナリオ 2: キャッシュを実装します。 10,000 ユーザーのランキングの計算は非常にリソースを消費するため、最初の計算後にデータをキーに保存し、このキーの生存時間を設定します。 1 時間後に生存時間が経過するとキーが削除され、新しいランキングが再度計算されて一時キーが保存されます。

//战斗排行榜
$rank = GET cache:rank:fight
if not $rank
    $rank = 计算排名()
    MULTI
    SET cache:rank:fight $rank
    EXPIRE cache:rank:fight 3600
    EXEC
ログイン後にコピー

Redis はメモリに保存されたデータベースです。メモリがキャッシュでいっぱいの場合、Redis は構成ファイルに基づいて特定のキャッシュを削除します。設定項目はRedis設定ファイルのmaxmemoryパラメータで、単位はバイトです。この制限を超えると、構成ファイルの maxmemory-policy パラメータに従って不要なキーが削除されます。 maxmemory-policy のオプションのルールは次の 4 つです:

1. volatile-lru: LRU アルゴリズムを使用してキー (生存時間が設定されたキー) を削除します。

2. allkey-lru: LRU アルゴリズムを使用してキーを削除します。

3. Volatile-random: キーをすぐに削除します (有効期間が設定されたキー)。

4. allkey-random: キーをすぐに削除します。

5. volatile-ttl: 有効期限が近づいているキーを削除します。すべてのキーを走査して期限切れになりそうなキーを削除するのではなく、一度に N 個のキーを取り出し、その N 個のキーのうち期限切れになりそうなキーを削除することです。 Nって何ですか?設定ファイル。

6. Nevication: 削除しないでください。エラーを返します。

Redis はキーの有効期限を設定します - EXPIRE コマンド

EXPIRE key seconds
ログイン後にコピー

指定されたキーの生存時間を設定します。キーの有効期限が切れると (生存時間は 0)、自動的に削除されます。 。

Redis では、生存期間を持つキーを「揮発性」(揮発性) と呼びます。

ライフタイムを削除するには、DEL コマンドを使用してキー全体を削除するか、SET および GETSET コマンドで上書きします。これは、コマンドがライフタイムを持つキーのみを変更 (変更) する場合、値がキーが新しいキー値に置き換えられても、有効期間は変更されません。

たとえば、キーに対して INCR コマンドを実行したり、リストに対して LPUSH コマンドを実行したり、ハッシュ テーブルに対して HSET コマンドを実行したりしても、これらの操作によってキー自体の生存時間は変更されません。

一方、RENAME を使用してキーの名前を変更した場合、名前を変更したキーの生存時間は名前変更前と同じになります。

RENAME コマンドのもう 1 つの可能性は、有効期間を持つキーの名前を有効期間を持つ another_key に変更しようとすることです。このとき、古い another_key (およびその有効期間) は削除され、古いキーはしたがって、新しい another_key の生存時間は元のキーと同じになります。

PERSIST コマンドを使用すると、キーを削除せずにキーの有効期間を削除でき、キーを再び「永続的」キーにできるようになります。

生存時間の更新

すでに生存時間が設定されているキーに対して EXPIRE コマンドを実行すると、新しく指定した生存時間で古い生存時間が置き換えられます。

有効期限の精度

Redis 2.4 バージョンでは、有効期限の遅延は 1 秒以内です。つまり、キーの有効期限が切れている場合でも、有効期限が切れる可能性があります。期限切れ後も 1 秒以内にアクセスできますが、新しい Redis 2.6 バージョンでは、遅延が 1 ミリ秒未満に短縮されます。

Redis 2.1.3 より前の相違点

Redis 2.1.3 より前のバージョンでは、生存期間を指定してキーを変更すると、キー全体が削除され、この動作が発生します。これは当時のレプリケーション層の制限によるものでしたが、この制限は現在修正されています。利用可能なバージョン:

>= 1.0.0

時間計算量:

O(1)

戻り値:

设置成功返回 1 。

当 key 不存在或者不能为 key 设置生存时间时(比如在低于 2.1.3 版本的 Redis 中你尝试更新 key 的生存时间),返回 0 。

redis> SET cache_page "www.google.com"
OK

redis> EXPIRE cache_page 30  # 设置过期时间为 30 秒
(integer) 1

redis> TTL cache_page    # 查看剩余生存时间
(integer) 23

redis> EXPIRE cache_page 30000   # 更新过期时间
(integer) 1

redis> TTL cache_page
(integer) 29996
ログイン後にコピー

1、在小于2.1.3的redis版本里,只能对key设置一次expire。redis2.1.3和之后的版本里,可以多次对key使用expire命令,更新key的expire time。

2、redis术语里面,把设置了expire time的key 叫做:volatile keys。 意思就是不稳定的key。

3、如果对key使用set或del命令,那么也会移除expire time。尤其是set命令,这个在编写程序的时候需要注意一下。

4、redis2.1.3之前的老版本里,如果对volatile keys 做相关写入操作(LPUSH,LSET),和其他一些触发修改value的操作时,redis会删除 该key。

也就是说 :

redis.expire(key,expiration);

redis.lpush(key,field,value);

redis.get(key) //return null
ログイン後にコピー

redis2.1.3之后的版本里面没有这个约束,可以任意修改。

redis.set(key,100);
redis.expire(key,expiration);
redis.incr(key)
redis.get(key)
//redis2.2.2 return 101; redis<2.1.3 return 1;
ログイン後にコピー

5、redis对过期键采用了lazy expiration:在访问key的时候判定key是否过期,如果过期,则进行过期处理。其次,每秒对volatile keys 进行抽样测试,如果有过期键,那么对所有过期key进行处理。

更多redis知识请关注redis入门教程栏目。

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Redisクラスターモードの構築方法 Redisクラスターモードの構築方法 Apr 10, 2025 pm 10:15 PM

Redisクラスターモードは、シャードを介してRedisインスタンスを複数のサーバーに展開し、スケーラビリティと可用性を向上させます。構造の手順は次のとおりです。異なるポートで奇妙なRedisインスタンスを作成します。 3つのセンチネルインスタンスを作成し、Redisインスタンスを監視し、フェールオーバーを監視します。 Sentinel構成ファイルを構成し、Redisインスタンス情報とフェールオーバー設定の監視を追加します。 Redisインスタンス構成ファイルを構成し、クラスターモードを有効にし、クラスター情報ファイルパスを指定します。各Redisインスタンスの情報を含むnodes.confファイルを作成します。クラスターを起動し、CREATEコマンドを実行してクラスターを作成し、レプリカの数を指定します。クラスターにログインしてクラスター情報コマンドを実行して、クラスターステータスを確認します。作る

鍵はRedisクエリにとってどのようにユニークですか 鍵はRedisクエリにとってどのようにユニークですか Apr 10, 2025 pm 07:03 PM

Redisは、キーの一意性を確保するために5つの戦略を使用します。1。名前空間分離。 2。ハッシュデータ構造。 3.データ構造を設定します。 4。文字列キーの特殊文字。 5。LUAスクリプト検証。特定の戦略の選択は、データ組織、パフォーマンス、およびスケーラビリティ要件に依存します。

基礎となるRedisを実装する方法 基礎となるRedisを実装する方法 Apr 10, 2025 pm 07:21 PM

Redisはハッシュテーブルを使用してデータを保存し、文字列、リスト、ハッシュテーブル、コレクション、注文コレクションなどのデータ構造をサポートします。 Redisは、スナップショット(RDB)を介してデータを維持し、書き込み専用(AOF)メカニズムを追加します。 Redisは、マスタースレーブレプリケーションを使用して、データの可用性を向上させます。 Redisは、シングルスレッドイベントループを使用して接続とコマンドを処理して、データの原子性と一貫性を確保します。 Redisは、キーの有効期限を設定し、怠zyな削除メカニズムを使用して有効期限キーを削除します。

Redisクラスターはどのように実装されていますか Redisクラスターはどのように実装されていますか Apr 10, 2025 pm 05:27 PM

Redis Clusterは、Redisインスタンスの水平拡張を可能にする分散展開モデルであり、ノード間通信、ハッシュスロット部門キースペース、ノード選挙、マスター奴隷レプリケーション、コマンドリダイレクトを通じて実装されます。ハッシュスロット:キースペースをハッシュスロットに分割して、キーの責任ノードを決定します。ノード選挙:少なくとも3つのマスターノードが必要であり、選挙メカニズムを通じて1つのアクティブマスターノードのみが保証されます。マスタースレーブレプリケーション:マスターノードはリクエストの書き込みを担当し、スレーブノードはリクエストとデータレプリケーションを読む責任があります。コマンドリダイレクト:クライアントはキーを担当するノードに接続し、ノードは誤ったリクエストをリダイレクトします。トラブルシューティング:障害検出、オフラインのマーク、および再

Redisのバージョン番号を表示する方法 Redisのバージョン番号を表示する方法 Apr 10, 2025 pm 05:57 PM

Redisバージョン番号を表示するには、次の3つの方法を使用できます。(1)情報コマンドを入力し、(2) - versionオプションでサーバーを起動し、(3)構成ファイルを表示します。

Redisのすべてのキーを表示する方法 Redisのすべてのキーを表示する方法 Apr 10, 2025 pm 07:15 PM

Redisのすべてのキーを表示するには、3つの方法があります。キーコマンドを使用して、指定されたパターンに一致するすべてのキーを返します。スキャンコマンドを使用してキーを繰り返し、キーのセットを返します。情報コマンドを使用して、キーの総数を取得します。

Redis Zsetの使用方法 Redis Zsetの使用方法 Apr 10, 2025 pm 07:27 PM

Redis Orderedセット(ZSET)は、並べ替えられた要素を保存し、関連するスコアでソートするために使用されます。 zsetを使用する手順には次のものがあります。1。zsetを作成します。 2。メンバーを追加します。 3.メンバースコアを取得します。 4。ランキングを取得します。 5.ランキング範囲のメンバーを取得します。 6.メンバーを削除します。 7.要素の数を取得します。 8。スコア範囲のメンバーの数を取得します。

Redisコマンドラインの使用方法 Redisコマンドラインの使用方法 Apr 10, 2025 pm 10:18 PM

Redisコマンドラインツール(Redis-Cli)を使用して、次の手順を使用してRedisを管理および操作します。サーバーに接続し、アドレスとポートを指定します。コマンド名とパラメーターを使用して、コマンドをサーバーに送信します。ヘルプコマンドを使用して、特定のコマンドのヘルプ情報を表示します。 QUITコマンドを使用して、コマンドラインツールを終了します。

See all articles