Redis
 Computer >> コンピューター >  >> プログラミング >> Redis

Redisレプリカにキーがありません

Redisで期限切れの(「揮発性」とも呼ばれる)キーを使用する場合、新しいRedisレプリカをデータベースにアタッチすると、驚くかもしれません。レプリカのキーカウントは、プライマリDBのキーカウントよりも大幅に少ない可能性があります。 。これは、揮発性キーが多数ある場合に特に一般的です。

Redisレプリカにキーがありませんか?データを失っただけですか?簡単な答えは「いいえ」です。ただし、データを失っていないのに、Redisレプリカがより少ないキー数を報告している理由を正確に理解することは役に立ちます。これには、Redisがキーを期限切れにする方法と、Redisがデータセットを新しいレプリカに送信する方法の2つの実装の詳細が含まれます。

Redisはどのように揮発性キーを期限切れにしますか?

Redisでは、揮発性キーは、期限切れに設定された瞬間にメモリから消去されません。代わりに、次の2つの方法のいずれかで削除されます。

  1. Redisクライアントがキーに対して読み取りまたは書き込み操作を実行すると、Redisserverは最初にそのキーが存在し、有効期限があるかどうかを確認します。存在し、過去に有効期限がある場合、Redisはすぐにキーをメモリから消去します。コマンドを処理する前に。

  2. 揮発性キーがアクセスされない場合にメモリ内に永久に残るのを防ぐために、Redisは単純なパッシブアルゴリズムを使用してキーを期限切れにします。10ミリ秒ごとに100個のランダムな揮発性キーを取得し、有効期限が過ぎたキーをすぐに消去します。 25個以上のキーが消去された場合、すぐに別の100個のキーを取得して、再開します。

上記の2番目の方法は重要です。これは、かなりの数のキーが、すでに「期限切れ」になっているが、まだメモリから消去されていない揮発性キーである可能性があることを意味します 1 。 Redisは、これらのキーを引き続きINFOの「keys」および「expires」カウントに含めます。 消去されるまで出力します。

Redisはデータセットを新しいレプリカにどのように送信しますか?

Redisレプリカが自分自身をRedisサーバーに接続すると、プライマリサーバーはそのデータセットのRDBスナップショットを作成し、レプリカに送信します。また、RedisがRDBスナップショットを作成する場合、有効期限が過去のキーは含まれません。 、まだメモリから消去されていなくても。

では、レプリカのキー数がプライマリサーバーのキー数よりも少ないのはなぜですか?

レプリカをRedisインスタンスにアタッチすると、そのレプリカは、プライマリデータベースから期限切れの(ただしまだ存在している)揮発性キーを含まないデータセットを受信します。これは、RDBバックアップからRedisサーバーを復元するときにキー数が減少する可能性があるのと同じ理由です。

RDBの動作を追跡するのに役立つ@mattstaに特に感謝します。

  1. 実際には、Redisが削除するキーを常に探しているため、この数は通常はるかに少なくなります。 ↩


  1. Redisキー–Redisデータストアのキーを管理するコマンド

    Redisでは、キーはデータベースに保存されている値を保存、管理、取得するための一意の識別子として使用されます。キーは、redis-cliのRedisコマンドを使用して管理できます。 redis Keyコマンドを使用するための構文は次のとおりです:- 構文:- redis host:post> <Command Name> <key name> 例:- Redisキーコマンド:- redisデータベースでキーを管理するための重要なコマンドのいくつかは次のとおりです:- S。いいえ コマンド 説明 1 DEL キーが存在する場

  2. Redisキー–1つ以上のキーをredisデータストアに保存する方法

    このチュートリアルでは、コマンド-redis-cliのキーを使用してredisデータストアに保存されている1つ以上のキーを取得する方法について学習します。 このコマンドは、指定されたパターンに一致する1つ以上のキーを返すために使用されます。パターンはglobスタイルで指定されます。 グロブスタイルパターン:- *ワイルドカード:- スペースを含む0個以上の文字に一致します。たとえば、foo *はfooccc、foo、fooqに一致します。 ?ワイルドカード:- スペースを含む任意の文字の1つと正確に一致します。たとえば、f?0はfao、fbo、fcoと一致します。 [list