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

redisdbsizeコマンドの精度

    キーの有効期限に関連していると思います。

    Redisやmemcachedのようなキー/値ストアは、期限切れになるオブジェクトごとに物理タイマーを定義する余裕がありません。それらの数が多すぎるでしょう。代わりに、期限切れになるアイテムを簡単に追跡するためのデータ構造を定義し、すべての期限切れイベントを単一の物理タイマーに多重化します。また、これらのイベントに対処するために怠惰な戦略を実装する傾向があります。

    Redisでは、アイテムの有効期限が切れても何も起こりません。ただし、各アイテムにアクセスする前に、期限切れのアイテムが返されないように体系的にチェックが行われ、アイテムが削除される可能性があります。この怠惰な戦略に加えて、100ミリ秒ごとに、スカベンジャーアルゴリズムがトリガーされ、多数のアイテムが物理的に期限切れになります(つまり、メインディクショナリからアイテムが削除されます)。各反復で考慮されるキーの数は、有効期限のワークロードによって異なります(アルゴリズムは適応型です)。

    その結果、Redisには、有効期限イベントが安定して流れているときに、特定の時点で有効期限が切れるアイテムのバックログが発生する可能性があります。

    ここで質問に戻りますが、DBSIZEコマンドはメインディクショナリのサイズを返すだけなので、まだ削除されていない期限切れのアイテムが含まれます。 KEYSコマンドは、辞書全体を調べて個々のキーにアクセスするため、期限切れのアイテムをすべて除外します。したがって、アイテムの数が一致しない場合があります。




    1. キーの半分を削除しても、Redisのメモリ使用量が減らないのはなぜですか

    2. MongoDBでユーザーと認証を管理する方法

    3. 行をMongoDBの列にピボットします

    4. 同じサーバー上のMongoDBの複数のインスタンス