java中redis的pipeline
pipeline方式執(zhí)行redis操作:
List<Object> results = this.getRedisTemplate().executePipelined(new RedisCallback<Object>() {
@Override
public Object doInRedis(RedisConnection connection) throws DataAccessException {
RedisSerializer<String> keySerializer=new StringRedisSerializer();
for (String key : keys) {
connection.get(keySerializer.serialize(key));
}
return null;
}
});
doInRedis方法中實(shí)現(xiàn)需要的redis操作
RedisTemplate中的executePipelined方法:
public List<Object> executePipelined(final RedisCallback<?> action) {
return executePipelined(action, valueSerializer);
}
public List<Object> executePipelined(final RedisCallback<?> action, final RedisSerializer<?> resultSerializer) {
return execute(new RedisCallback<List<Object>>() {
public List<Object> doInRedis(RedisConnection connection) throws DataAccessException {
connection.openPipeline();
boolean pipelinedClosed = false;
try {
Object result = action.doInRedis(connection);
if (result != null) {
throw new InvalidDataAccessApiUsageException(
"Callback cannot return a non-null value as it gets overwritten by the pipeline");
}
List<Object> closePipeline = connection.closePipeline();
pipelinedClosed = true;
return deserializeMixedResults(closePipeline, resultSerializer, resultSerializer, resultSerializer);
} finally {
if (!pipelinedClosed) {
connection.closePipeline();
}
}
}
});
}
注意
- doInRedis中的redis操作不會(huì)立刻執(zhí)行
- 所有redis操作會(huì)在connection.closePipeline()之后一并提交到redis并執(zhí)行锥咸,這是pipeline方式的優(yōu)勢(shì)
- 所有操作的執(zhí)行結(jié)果為executePipelined()的返回值