アプリケーション (jedis ドライバーを使用して Java で記述) から少量のデータ (約 50 バイト) を、約 360 のメンバー (各メンバーにも非常に少量のデータが含まれる) を持つソート済みセットにプッシュしようとしています。アプリケーションが挿入を行ってから、redis サーバー (別のデータ センターにある別のサーバー) で結果を確認するまでに 60 ~ 90 秒のタイムラグが発生しています。これは一貫して発生します。最初は、アプリケーションに何かが原因でクエリがハングし、1 分後に実行されると思っていましたが、そうではありません。クエリを実行した直後にアプリケーション サーバーを完全にシャットダウンし、新しいアイテムがまだ 1 分表示されるためです。後でRedisで。さらに、セットのすべての要素を削除して挿入を再試行すると、すぐに実行されました (これは意図した動作です)。
これは完全にテスト環境にあり、他のトラフィックがどちらのサーバーにもヒットしていません。私のRedisサーバーにはデータがほとんどなく、十分なRAMとCPUがあります。アプリケーション サーバーと redis サーバー間のレイテンシは約 50 ミリ秒です。
このような遅延を引き起こしている可能性のある、私が見逃している構成設定はありますか?
前もって感謝します。
編集:挿入するための私のコードは次のとおりです
public void save(RedisEntity entity) {
String key = entity.getKey();
String value = entity.getValue();
Jedis jedis = database.getJedis();
try {
if (entity instanceof RedisListEntity) {
if (((RedisListEntity)entity).isSavePushesLeft()) {
jedis.lpush(key, value);
} else {
jedis.rpush(key, value);
}
} else if (entity instanceof RedisSortedSetEntity) {
Long score = ((RedisSortedSetEntity)entity).getScore();
jedis.zadd(key, score, value);
} else if (entity instanceof RedisSetEntity) {
jedis.sadd(key, value);
} else {
jedis.set(key, value);
}
} catch (JedisConnectionException e) {
raiseErrorForSave(key, value);
database.returnBrokenResourceToPool(jedis);
} finally {
database.returnResourceToPool(jedis);
}
}
そして取得 (ただし、挿入後 1 ~ 2 分間はキーが redis サーバーの redis-cli に表示されないことに注意してください。したがって、このコードは決して問題の一部ではありませんでした):
public Set<String> getSortedSetMembersWithRangeRankRev(String key, double min, double max, int start, int size) {
Set<String> result = null;
Jedis jedis = database.getJedis();
try {
result = jedis.zrevrangeByScore(key, max, min, start, size);
} catch (JedisConnectionException e) {
logger.warn("Failed to retrieve set for key " + key);
logger.warn(e.getMessage());
database.returnBrokenResourceToPool(jedis);
} finally {
database.returnResourceToPool(jedis);
}
return result;
}
編集: いくつかの詳細情報 - Redis サーバーを数日間オンにしてから再起動しました (開発環境にあるため、トラフィックはほとんどありません)。セットが 1000 メンバーに達すると、更新が即座に行われるようです。この問題は私にとってはまだ厄介な問題であり、原因を特定して今後発生しないようにしたいと考えています。それまでは、これを本番環境にリリースすることはできません。