26

このスレッドによると、Java から Redis を使用したい場合は、Jedis を使用するのが最適です。

ただし、Redis に既に存在するものと同様に効率的なセット操作を提供するライブラリ/パッケージがあるかどうか疑問に思っていましたが、別のサーバーをセットアップする必要なく Java アプリケーションに直接埋め込むことができます。(つまり、Web サーバーに Jetty を使用します)。

より正確には、次のことを効率的に実行できるようにしたいと考えています。

  1. M 人のユーザーの大規模なセットがあります (M は事前にわかりません)。
  2. N 個のアイテムの大規模なセットがあります。
  3. 一度に 1 人のユーザー/アイテムをユーザーに調べてもらい、(通常のデータベースに) 保存された結果を生成します。
  4. ユーザーが到着するたびに、ユーザーがまだ見たことのない既存の結果の数が最も少ないアイテムをそのユーザーに割り当てたいと考えています。これにより、すべてのアイテムをほぼ同じ回数だけ表示することに関心がある場合、到着したすべてのユーザーに対してアイテムの近似ラウンドロビン割り当てが生成されます。

上記は並列化された方法で行われます。M と N が大きい場合、Redis は上記を SQL クエリよりもはるかに効率的に実行します。Redis サーバーを起動するよりも少し軽量な組み込み可能な Java ライブラリを使用してこれを行う方法はありますか?

Java の同時実行ライブラリを使用して、これに大まかに近似する大量のコードを作成できることは認識していますが (ある程度、私はそれを実行しました)、ここで探しているのは正確ではありません。

4

4 に答える 4

11

プロジェクトvoldemortを見てください。これは、Linked-In によって作成された分散型のキー値ストアであり、埋め込み機能をサポートしています。

クイック スタート ガイドには、サーバーを組み込みとスタンドアロンで実行する小さな例があります。

VoldemortConfig config = VoldemortConfig.loadFromEnvironmentVariable();
VoldemortServer server = new VoldemortServer(config);
server.start();

私は Redis についてよく知らないので、それらの機能を比較することはできません。ヴォルデモートを使用したプロジェクトでは、読み取り専用のバッキング ストアを使用して素晴らしい結果を得ました。これにより、処理データセンターで 2 日ごとのデータベースを「プリコンパイル」し、エッジ データセンターに「出荷」することができました。このようにして、各エッジ データセンターはそのデータセットのローカル コピーを保持していました。

編集: あなたの質問を読み直した後、Gauvaのテーブルを追加したいと思いました。

于 2013-03-07T19:25:16.807 に答える
-6

Google の Guava Library は、redis が提供するものと同じ (およびそれ以上の) Set 演算子の使いやすいバージョンを提供します。

https://code.google.com/p/guava-libraries/wiki/CollectionUtilitiesExplained

例えば

    Guava Redis
    Sets.intersection(a,b) シンター ab
    a.count() スカー
    Sets.difference(a,b) sdiff ab
    Sets.union(a,b) sunion ab

マルチセットは、redis のソート済みセットのか​​なり単純なプロキシでもあります。

于 2013-04-26T04:59:36.337 に答える