4

デフォルトでは、Redisは0〜15の番号が付けられた16個のデータベースで構成されています。これは単に名前の間隔の形式ですか、それともデータベースによる分離のパフォーマンスへの影響がありますか?

たとえば、デフォルトのデータベース(0)を使用していて、キーが1,000万個ある場合、ベストプラクティスでは、keysコマンドを使用してワイルドカードパターンでキーを検索するのは非効率的です。しかし、メジャーキー(おそらく8セグメントキーの最初の4セグメント)を保存すると、別のデータベース(データベース3など)にキーのサブセットがはるかに小さくなります。Redisはこれらをより小さなキーのセットと見なしますか、それともすべてのデータベースのすべてのキーが1つの巨大なキーのインデックスとして表示されますか?

時間計算量の観点から、私のデータベースが次のようになっている場合は、より明確に説明します。

  • データベース0:10,000,000キー
  • データベース3:10,000キー

データベース3に対するキー呼び出しの時間計算量はO(10m )ですか、それともO(10k)ですか?

御時間ありがとうございます。

4

1 に答える 1

7

Redisには、データベースごとに個別の辞書があります。あなたの例から、データベース3に対するキー呼び出しはO(10K)になります

とはいえ、使用keysはベストプラクティスに反します。さらに、同じアプリケーションに複数のデータベースを使用することも、ベストプラクティスに反します。キーを反復処理する場合は、アプリケーション固有の方法でキーにインデックスを付ける必要があります。SortedSetは、インデックスを作成するための良い方法です。

参照:

  1. 構造redisServerにはの配列がありredisDBます。redis.hのredisServerを参照してください
  2. それぞれredisDBに独自の辞書オブジェクトがあります。redis.hのredisDBを参照してください
  3. keysコマンドは、現在のデータベースの辞書を操作します
于 2012-05-26T04:40:13.383 に答える