私は指定されたフィールドだけで複数のハッシュマップ値を取得したいと思います。だから、私はRedisのパイプラインを選んだ。春のデータRedis:Redisパイプライン常にnullを返す
以下のコードをテストしているうちに、私はredisResponse1
が常にヌルであると見ています。ここではredisResponse2
に値があります。
getRedisTemplate().executePipelined(new RedisCallback<Object>() {
@Override
public Object doInRedis(RedisConnection connection) throws DataAccessException {
List<byte[]> redisResponse1 = connection.hMGet(key.getBytes(), params);
List<byte[]> redisResponse2 = getRedisTemplate().getConnectionFactory().getConnection().hMGet(key.getBytes(), specificParams);
return null;
}
});
Iコードを調べて、その下に、見つかった場合
A)redisResponse2
がパイプラインオプションで実行されない
B)redisResponse1
がパイプラインで実行される(isPipelined()== TRUE)常にnullを返します。
public List<byte[]> hMGet(byte[] key, byte[]... fields) {
try {
if (isPipelined()) {
pipeline(new JedisResult(pipeline.hmget(key, fields)));
return null;
}
if (isQueueing()) {
transaction(new JedisResult(transaction.hmget(key, fields)));
return null;
}
return jedis.hmget(key, fields);
} catch (Exception ex) {
throw convertJedisAccessException(ex);
}
}
だから、質問は
1です)どのように私は、パイプラインオプションを使用して私のユースケースを実現するのですか?
2)このRedisCallback内でgetRedisTemplate().getConnectionFactory().getConnection()
にアクセスするとどのような影響がありますか?
3)このパイプライン全体のコンセプトはどのように機能していますか?それは動的なルアのようですか?このJavaコードはLuaスクリプトとして変換され、Redisにスクリプトとして送信され、Redisで実行されて戻ってきますか?このコールバック内で驚いた。コードは外部クラス変数にもアクセス/更新しています。そのため、すべての変数に何が起こりますか?これらの外部クラス変数はすべて、luaのredisにも送信されますか?
4)多くの例があります。doInRedis
APIはnull
です。なぜそうなのか?それから有効なオブジェクトを返す/取得する方法?
spring-data-redis-1.6.6.RELEASE.jarを使用する –