問題タブ [jedis]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Redis ハッシュの書き込み速度が非常に遅い
私は非常に奇妙な問題に直面しています.redisを使用すると、書き込み速度が非常に遅くなります(理想的な世界では、書き込み速度はRAMの書き込み速度に近づく必要があります)。
これが私のベンチマークです:
RandomStringランダムな文字列を生成するクラスです (引数は文字列の長さです)
以下は、いくつかの結果です。
[書き込み]nb:100000|時間:4.408319378|速度:0.713905907055318 MB/秒 [書き込み]nb:100000|時間:4.447246995|速度:0.707656949946542 MB/秒
設定ファイルの save to hdd パラメータを変更しようとしましたが、改善されませんでした。
私には2つのアイデアがあります:
1.クライアントとサーバー(redis)が同じマシン上にあるため、ソケットの問題です
2.コネクタの実装にはパフォーマンスの問題があります
更新セット操作のベンチマーク結果:
====== SET ======
10000 リクエストが 0.09 秒で完了
50 の並列クライアント
3 バイトのペイロード
キープアライブ: 199.51% <= 1 ミリ秒
100.00% <= 1 ミリ秒
111111.11 リクエスト/秒
システム仕様 :
- Ubuntu 11.04
- 8GB RAM
- Intel i5 プロセッサ
どんな提案でも大歓迎です。
java - javaクライアントを使用してredisからerlang用語を読み取る方法は?
たとえば、タプル T = {k1, v1, k2, v2} を jedis で redis に保存します。
以下のコードを使用して、この erlang 用語を読み取ろうとしています。
エラー: com.ericsson.otp.erlang.OtpErlangDecodeException: 不明なデータ型: 239。
では、どうすれば erlang 用語を正しく取得できますか?
Erlang 側:
term_to_binary({k1, v1, k2, v2})。
<<131,104,4,100,0,2,107,49,100,0,2,118,49,100,0,2,107,50, 100,0,2,118,50>>
Java 側:
j.get("mykey").getBytes():
-17 -65 -67 104 4 100 0 2 107 49 100 0 2 118 49 100 0 2 107 50 100 0 2 118 50.
最初の 3 バイトだけが異なるようです。そこで、それらを byte(131) に変更すると、System.out.println(OtpErlangObject.decode(ois)) で正しく印刷できます。
ただし、リストが含まれるレコードなど、用語がより複雑な場合は機能しません。データの先頭だけでなく、末尾や途中にも他の文字が表示されるためです。
保存したデータが取得したデータと異なるのはなぜですか?
java - Jedis - returnBrokenResource() をいつ使用するか
正確にいつこのメソッドを使用する必要があるか。JedisConnectionException、JedisDataException、または任意の JedisException の場合。私の知る限り、Jedis に関する適切な API ドキュメントはありません。
heroku - 結果を伴う非同期作業キューの正しいアプローチは何ですか?
Heroku に REST サーバーがあります。REST サービス用の N-dyno とワーカー用の N-dyno があります。
基本的に、私はいくつかの長期にわたる休息リクエストを持っています。これらが入ってきたら、ワーカーの 1 つに委任し、クライアントにリダイレクトを与えて操作をポーリングし、最終的に操作の結果を返したいと考えています。
これには、RedisToGo の JEDIS/REDIS を使用します。私が知る限り、これを行うには2つの方法があります。
- PUB/SUB 機能を使用できます。パブリッシャーに作業結果の一意の ID を作成してもらい、これらをリダイレクト URI で REST クライアントに返します。
- 基本的には同じですが、PUB/SUB の代わりに RPUSH/BLPOP を使用します。
1位のメリットがよくわかりません。たとえば、LongMathOperation というタスクがある場合、このリストを単純に作成できるように思えます。リスト要素は、算術演算の引数と、結果を配置する場所として REST サーバーによって生成された UUID を持つ JSON オブジェクトです。次に、すべてのワーカー dyno が BLPOP 呼び出しをブロックするだけで、最初の dyno がジョブを取得して処理し、UUID のキーを使用して結果を REDIS に入れます。
わかる?だから私の質問は、「PUB/SUB を使用する方がこれより優れているのはなぜですか?」ということです。PUB/SUB は、私が見逃していることをここでテーブルにもたらしますか?
ありがとう!
exception - Jedis クライアントとのトランザクションでの Redis 例外
私の redis チャネルでの重複を避けるために、Redis セットにインデックスを保持することで、メッセージが既に存在するかどうかを確認しています。以下は私の実装です。ただし、例外を与えています。
これが実装です。
まったく同じメッセージを公開する可能性のある複数のパブリッシャーが存在するため、トランザクション内で get を実行する必要があります。
java - Spring Jetty と Camel でリソースを処理する正しい方法
私は webapp (Jetty、Spring、Camel) を持っています。今度は、Camel ルートで (Jedis を使用して) Redis に接続したいと考えています。Jedis プールを作成する場所 (および時期) と Camel ルートでこのプールにアクセスするにはどうすればよいですか? Camel コンテキスト XML でプールを作成することを考えていました。しかし、ルート (Java DSL) でこのプールにアクセスする方法がわかりません。
spring - Spring data Redis HGETALL operation
I am using Redis as data store for my spring web application and using Spring Data-Redis as my client to interact with Redis.
I am using HashMap to store one my objects having multiple fields. I am able to put all the fields into Redis at once using DefaultRedisMap.putAll() method, but I am not able to get the whole object at once instead using BoundHashOperations to get each field using get() method.
I am wondering is there any way I can do that just like HGETALL operation supported in Redis?
concurrency - 複数の並行プログラムが同じハッシュ キーで読み取り/削除を行っている場合の Redis の動作
Redis HASH ( ) に定期的に書き込むプログラム ( program_1) (Jedis ベース) があります。KEY_1定期的に実行する別のプログラム ( program_2) (別の JVM プロセス) があり、Redis トランザクションで次のことを行います。
私の仮定は、program_2 が (KEY_1 を使用して) HASH を削除したときに、次に program_1 が実行されたときに HASH が再び作成されるというものです。これは正しいです ?