問題タブ [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 - 新しい Jedis クライアントが静的 Java メソッドで動作しない
この同じコードが異なる結果になるのはなぜですか?
Redis への接続を作成するために Jedis 2.1.0 を使用しています。
方法 A:
方法 B:
違いは、再利用を容易にするためにメソッド A が静的メソッドに隠されているため、呼び出されたときにメソッド B と同じ効果があるはずだと考えています。
代わりに、メソッド A を使用すると例外が発生します。メソッド B は正常に動作します。
方法 A 例外:
スレッド「メイン」の例外 redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException: 接続が拒否されました: redis.clients.jedis.Connection.connect(Connection.java:134) で redis.clients.jedis に接続します。 redis.clients.jedis.Connection.sendCommand(Connection.java:86) の BinaryClient.connect(BinaryClient.java:69) redis.clients.jedis.BinaryClient.ping(BinaryClient.java:82) の redis.clients.jedis .Jedis.ping(Jedis.java:34) at org.tripodwire.esme.receiver.ReceiverProducer.produceTestJedis(ReceiverProducer.java:168) at org.tripodwire.esme.entry.Entry.main(Entry.java:25)
java - Jedis は非同期操作をサポートしていますか
Redis サーバーと通信するために Jedis (Java クライアント) を使用しています。3 つの異なるノードで実行されている 3 つの Redis インスタンスがあります。3 つの Redis インスタンスからいくつかのレコードを「取得」(読み取り) したいと考えています。これらの「取得」(読み取り) を並行して発行し、受信したデータに対して何らかの処理を行い、最終的な出力を形成したいと考えています。
Javaでこれを行う最良の方法は何ですか?
方法の 1 つは、3 つのスレッドを作成し、それぞれで (同期的に) "get" (読み取り) を発行することです。3 つのコマンドがすべて完了するのを待ってから、結果を結合します。
Jedis には、コールバック機能を使用して、3 つの「取得」(その件に関する任意のコマンド) を非同期で発行するメカニズムがありますか?
3 つの異なる Redis インスタンスがあります。これらのRedisインスタンスと並行してやり取りするために「ShardedJedisPipeline」(jedis/tests/ShardedJedisPipelineTest.java)を使用することをお勧めしますか?
通常の Jedis パイプライン (jedis/tests/PipeliningTest.java) は、単一の Redis インスタンスに複数のコマンドを送信するだけなので、それらは Redis サーバーで次々に実行されます (そして最後にすべての応答が利用可能になります)。
したがって、「ShardedJedisPipeline」を使用する必要があると思います。ただし、これには 2 つの制限があります。 1. Lua スクリプト、つまり「eval」を 3 つの Redis インスタンスで並行して実行したい。2. シャーディング (Jedis が使用するハッシュ アルゴリズム) を使用してデータを配布したり、単独で (そのアルゴリズムを使用して) インスタンスからデータを読み取ったりしたくありません。データを配布するための別の戦略があります。したがって、レコードをどの redis インスタンスに保存し、それに応じてどこから読み取るかを指定できるようにしたいと考えています。keyTags はこのメカニズムを提供しているようですが、これを「eval」で使用する方法がわかりません。
java - 'Proxy.newProxyInstance()'スレッドの返されたプロキシオブジェクトはJavaで安全ですか?
Jedisのプロキシクラスを作成すると、リソースをプールに戻し、壊れたリソースに自動的にマークを付けることができます。
次に使用します:
JedisPoolはスレッドセーフであることを私は知っています。
しかし、「jc」オブジェクトスレッドは安全ですか?Proxy.newProxyInstance()スレッドのプロキシオブジェクトは安全ですか?
Proxyのソースコードを見ました。プロキシオブジェクトはJVMによって作成されましたが、JVMに精通していません。
ありがとう!
tomcat - Redis / Jedis - Tomcat がハングする - - <5c1a77ba> (org.apache.commons.pool.impl.GenericObjectPool$Latch) を待機中
次の問題があります。
Tomcat が次のスレッド ダンプでハングします。
私のアプリケーションは、Jedis クライアントで Redis DB を使用します。1 秒あたり約 2K のリクエストがあります。数時間後、すべてのスレッドが待機しています。
それはDBCPの問題でしょうか?Redis / Jedis で接続プールを作成する他の方法はありますか?
ありがとう
redis - 複数の JedisPool の使用
最初に、1 つの JedisPool を使用して Redis サーバー (サーバー上で実行されている単一の Redis インスタンス) と通信したとき、200K のクエリが完了するまでに 15 秒かかったことがわかりました。クエリごとに、次のことを行います。
以下を使用して作成された JedisPool:
ただし、8 つの JedisPools を同じサーバー (同じ redis インスタンス) に使用し、それらをラウンド ロビン方式で使用すると、200K のクエリが約 8 ~ 10 秒で処理されることがわかりました (以前は 1 つの JedisPool で 15 秒かかりました) => かなりの改善.
これの理由は何ですか?また、使用する必要がある JedisPools の最適な数はいくつですか?
java - redis pub sub と jedis 、sub がエラーでクラッシュする
全て
最新の Redis 2.4.16 をインストールし、その Pub/Sub システムを Java で使用しようとしています。私は毎秒チャネルにメッセージを入れています。パブリッシャーには問題はありませんが、サブスクライバーはメッセージでクラッシュします
例外:
ここに私のコードがあります:
出版社:
加入者:
プール構成:
Redis のインストールには、単純にコマンドを使用しました
この後、私は使用しませんでした./install_server.sh
Jedis のバージョンは 2.1.0、プラットフォームは Mac OS X です。
注: 私が気付いたのは、開始から約 30 秒後にサブスクライバーがクラッシュすることです。
jedis - Jedis は Java POJO を取得/設定できますか?
Redis サーバーに接続するための Java クライアントとして Jedis を使用しています。
質問 1: Object < ? を取得/設定する方法がないようです。Serializable> を拡張しますか? すべての値は String または byte[] でなければなりませんか?
「JRedis」やSpymemcache(memcachedサーバー用)などの他のクライアントも可能です。
質問 2: ShardedJedis を使用すると、auth/password を設定できませんか? Jedisクラスはできますが(auth(String password)を使用)。
redis - BinaryJedisによるパイプラインのサポート
生データを処理しているときに、BinaryJedisを使用してデータを保存および取得しています。Jedisパイプラインを使用すると、データをbyte[]形式でredisリストに保存できます。しかし、「lindex」を使用してこのリストデータ(1つのエントリ)を取得しようとすると、このためのインターフェイスが見つかりません。つまり、lindexは入力としてbyte []を受け取りますが、Responseを返します。
応答を返すインターフェイスがない理由
java - プールからリソースを取得できませんでした (SocketTimeoutException:)
複数のワーカー スレッド (約 10) を実行して、redis Q からデータにアクセスしています。
私はJedis Clientに無限のタイムアウトを使用しています。
それでも「プールからリソースを取得できませんでした」というエラーが表示されます。スタックトレースを以下に示します。