基本介绍
pipeline即管道的意思,在Redis中,它表示的是一次性执行多条命令。
- 在原生模式下,
每执行一次redis命令,都需要经过发送命令(I/O)、执行命令(内存)和返回结果(I/O))三个阶段。
其中,主要耗时在发送命令与返回结果。
- 在pipeline模式下,
一次性执行多条命令,也只需要一次发送命令和一次返回结果。
节省了大量花费在I/O上的耗时。
pipeline模式的操作时非原子性的,若需要批量操作保持原子性,可以使用redis.call,执行LUA脚本的方式实现
基本使用
使用redisTemplate执行批量查询
/**
* 执行查询redis
*
* @param
* @param <T>
*/
public <T> List<T> queryObjectListByKeyList(List<String> keyList, final Class<T> clazz) {
List<Object> results = stringRedisTemplate.executePipelined(new RedisCallback<String>() {
@Override
public String doInRedis(RedisConnection connection) throws DataAccessException {
for (String key : keyList) {
connection.get(key.getBytes());
}
return null;
}
});
List<T> resultList = new ArrayList<>();
for (Object result : results) {
if (result != null && StringUtils.isNotBlank((String) result)) {
resultList.add(JSONObject.parseObject((String) result, clazz));
}
}
return resultList;
}