最初に、1 つの JedisPool を使用して Redis サーバー (サーバー上で実行されている単一の Redis インスタンス) と通信したとき、200K のクエリが完了するまでに 15 秒かかったことがわかりました。クエリごとに、次のことを行います。
Jedis jedis = pool.getResource();
Pipeline p = jedis.pipelined();
p.multi();
for (String ViewId : ViewIds) {
for (Article aR : view.getEntriesList()) {
p.rpush(ViewId, <article-in-json>);
}
p.ltrim(ViewId, -10, -1);
}
p.exec();
p.sync();
pool.returnResource(jedis);
以下を使用して作成された JedisPool:
JedisPool pool = new JedisPool(new JedisPoolConfig(), getHostName(), getPort(), 0, "foobared");
ただし、8 つの JedisPools を同じサーバー (同じ redis インスタンス) に使用し、それらをラウンド ロビン方式で使用すると、200K のクエリが約 8 ~ 10 秒で処理されることがわかりました (以前は 1 つの JedisPool で 15 秒かかりました) => かなりの改善.
これの理由は何ですか?また、使用する必要がある JedisPools の最適な数はいくつですか?