1.简介
Redis 使用的是客户端-服务器(CS)模型和请求/响应协议的 TCP 服务器。这意味着通常情况下一个请求会遵循以下步骤:
- 客户端向服务端发送一个查询请求,并监听 Socket 返回,通常是以阻塞模式,等待服务端响应。 服务端处理命令,并将结果返回给客户端。
- 管道(pipeline)可以一次性发送多条命令并在执行完后一次性将结果返回,pipeline 通过减少客户端与 redis的通信次数来实现降低往返延时时间,而且 Pipeline 实现的原理是队列,而队列的原理是时先进先出,这样就保证数据的顺序性。
通俗点:pipeline就是把一组命令进行打包,然后一次性通过网络发送到Redis。同时将执行的结果批量的返回回来
2.Maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
@Autowired
private RedisTemplate redisTemplate;
//管道技术批量添加到Redis中
List<String> result = redisTemplate.executePipelined(new RedisCallback<Object>() {
@Override
public Object doInRedis(RedisConnection connection) throws DataAccessException {
try {
for (Varmini varmini : listBD) {
String id = varmini.getId();
byte[] key = (PREFIX+id).getBytes();
connection.set(key,com.alibaba.fastjson.JSONObject.toJSONString(varmini).getBytes("UTF-8"));
//String values = connection.get(key).toString();
//log.info("================存取通道"+values);
}
} catch (Exception e) {
log.info("管道存入Reids报错信息:"+e);
}
return null;
}
});
//管道技术批量从缓存中取出再进行逻辑处理,转换实体类
List<String> listRedisget = redisTemplate.executePipelined(new RedisCallback<Object>() {
@Override
public String doInRedis(RedisConnection redisConnection) {
redisConnection.openPipeline();
try {
for (varvalues e : listmap) {
byte[] key = (PREFIX + e.getSmartvarid()).getBytes();
redisConnection.get(key);
}
} catch (Exception e) {
log.error("管道获取Reids报错信息:"+e);
}
return null;
}
});
//com.alibaba.fastjson.JSONArray jsonArray2 = JSON.parseArray(listRedisget.toString());
//System.out.println("解析后redisJson"+JSON.toJSONString(listRedisget));
//匹配缓存中没有的数据,减少报错,增加程序健壮性
String JSONtostring= JSON.toJSONString(listRedisget).replaceAll("null,","").replaceAll(",null","");
//Redis取值后进行逻辑处理转成实体类list
JSONArray jsonArraylist = new JSONArray(JSONtostring);
List<Varmini> RedisListDataAll = jsonArraylist.toList(Varmini.class);