简单理解【货物批发】:
第一种方式:想到一件商品就联系批发厂商送一件,劳命伤财;
第二种方式:将想要的商品列出清单让批发厂商一次性送来,成本节约;
第二种方式就可以看作是 pipelined。
@Slf4j
@Component
public class RedisUtil {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
/**
* @title: strAddPipelined
* @author: admin
* @createDate: 2022/2/25 21:50
* @version: 1.0
* @param map:
* @param seconds:
* @return: void
* @description: 使用pipelined批量存储
*/
public void strAddPipelined(Map<String, String> map, long seconds) {
RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
redisTemplate.executePipelined(new RedisCallback<String>() {
@Override
public String doInRedis(RedisConnection connection) throws DataAccessException {
map.forEach((key, value) -> {
connection.setNX(serializer.serialize(key), serializer.serialize(value));
connection.expire(serializer.serialize(key),seconds);
});
return null;
}
},serializer);
}
/**
* @title: strGetPipelined
* @author: admin
* @createDate: 2022/2/28 11:28
* @version: 1.0
* @param keyList:
* @return: java.util.List<java.lang.String>
* @description: 使用pipelined批量获取
*/
public List<String> strGetPipelined(List<String> keyList) {
RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
List<Object> objects = redisTemplate.executePipelined(new RedisCallback<String>() {
@Override
public String doInRedis(RedisConnection redisConnection) throws DataAccessException {
for (String key : keyList) {
redisConnection.get(serializer.serialize(key));
}
return null;
}
},serializer);
List<String> collect = objects.stream().map(val -> (String)(val)).collect(Collectors.toList());
return collect;
}
}