지정된 필드가있는 여러 해시 맵 값을 검색하고 싶습니다. 그래서 저는 Redis 파이프 라인을 선택했습니다.스프링 데이터 Redis : Redis 파이프 라인 항상 null을 반환
아래의 코드를 테스트하는 동안 redisResponse1
은 항상 null 인 것으로 나타났습니다. 여기에는 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;
}
});
나는 코드로보고 그 아래에, 발견 한 곳
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에서 실행되고 다시 돌아옵니다. 이 콜백 내에서 놀랐습니다. 코드는 외부 클래스 변수에도 액세스/업데이트하므로 모든 변수에 어떤 영향이 있습니까? 이러한 모든 외부 클래스 변수도 루아에서 redis로 전송됩니까?
4) 많은 예제가 있습니다. doInRedis
API가 null
을 반환합니다. 왜 그렇게? 반환하는 방법/그 유효한 개체를 얻을?
spring-data-redis-1.6.6.RELEASE.jar을 사용하여 –