1

私の現在のプロジェクトでは、さまざまな目的で redis を積極的に使用しています。現在のアプリケーションには2 つの redis データベースがあります。

  1. 最初のデータには完全に一時的なデータが含まれています: オンラインのユーザー数、オンラインのユーザー、さまざまな管理者のカウンター。このデータベースは、アプリケーションが起動スクリプトによって起動される前にクリアされます。
  2. 2 番目のデータベースは、ユーザーの評価、ユーザーの友人などの永続的なデータに使用されます。

すべてが正しいようで、みんな幸せです。

しかし、アプリケーションに新しい機能を実装し始めたとき、オンライン ユーザーのセットを持つユーザーの友人とセットを交差させる必要があることに気付きました。これらのセットは異なる redis データベースに保存されており、アプリケーション アーキテクチャを変更してすべてのキーを 1 つの名前空間(データベース)に移動することを除いて、redis でこのタスクを実行する可能性は見つかりませんでした。

複数のデータベースからのデータを使用して、実際に redis でコマンドを実行する方法はありますか? それとも、私の redis のユース ケースが間違っていて、システム アーキテクチャの修正を実行する必要があるのでしょうか?

4

1 に答える 1

5

存在しない。キーを別のDBに簡単に移動できるコマンドがあります。

http://redis.io/commands/move

すべてのキーを1つのDBに移動する場合は、キーの衝突がないことを確認してください。確実にするために、一時DBのキーに接尾辞または接頭辞を付けることができます。キーがターゲットDBにすでに存在する場合、MOVEは何もしません。したがって、必ず「0」の返信に基づいて行動してください

複数のDBを使用することは、絶対に良い考えではありません。

Salvatore Sanfilippo(redisの作成者)からの引用:

これがどのように役立つかは理解していますが、残念ながら、Redisの複数のデータベースエラーは、Redisの設計における最悪の決定であると考えています...実際の利益がなければ、内部がはるかに複雑になります。現実には、データベースは、キーやVMのアクティブな有効期限など、さまざまな理由で適切に拡張できません。DBの選択を文字列で実行できる場合、この機能がスケーラブルなO(1)ディクショナリレイヤーとして使用されていることがわかりますが、そうではありません。

DB番号を使用すると、デフォルトで数個のDBが使用されるため、この機能とは何か、どのように使用できるかについて、コミュニケーションが向上すると思います。いつか複数のDBのサポートを完全にやめることができることを願っていますが、仕事のためにこの機能に依存している人がたくさんいるので、おそらく手遅れだと思います。

https://groups.google.com/forum/#!msg/redis-db/vS5wX8X4Cjg/8ounBXitG4sJ

于 2012-11-19T15:32:05.623 に答える