当redis中某个文件夹下面,存了很多结构一样的hash类型数据,我们又需要批量一起取出来,用简单的hget命令效率很慢,这个时候就需要用到redis管道操作了,这样可以大大提升读取效率,可以用如下代码去操作
/**
* 根据redis key前缀批量获取文件夹下的hash值,并转换成对象
* @param tClass 接收hash的的数据类
* @param keyPrefix key前缀例如 user:
* @throws
* @return java.util.List<T>
* @author zhy
* @date 2020/4/10 16:37
*/
public <T> List<T> hgetAllByPrefix(Class<T> tClass,String keyPrefix){
Jedis jedis = null;
Pipeline pipelined = null;
try {
jedis = pool.getResource();
//批量获取文件夹下面的key值
Set<String> keys = jedis.keys(keyPrefix + "*");
//管道操作
pipelined = jedis.pipelined();
for (String key : keys) {
pipelined.hgetAll(key);
}
return JSON.parseArray(JSON.toJSONString(pipelined.syncAndReturnAll()),tClass);
} finally {//关闭资源
if (pipelined != null){
try {
pipelined.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (jedis != null){
jedis.close();
}
}
}