【DB系列】Redis之管道Pipelined使用姿势

文章目录
  1. I. 基本使用
    1. 1. 配置
    2. 2. 使用姿势
  2. II. 其他
    1. 0. 项目
    2. 1. 一灰灰Blog

redis管道技术,可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应,这种技术可以很方便的支持我们的批量请求,下面简单介绍下如何使用RedisTemplate来使用管道

I. 基本使用

1. 配置

我们使用SpringBoot 2.2.1.RELEASE来搭建项目环境,直接在pom.xml中添加redis依赖

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

如果我们的redis是默认配置,则可以不额外添加任何配置;也可以直接在application.yml配置中,如下

1
2
3
4
5
spring:
redis:
host: 127.0.0.1
port: 6379
password:

2. 使用姿势

这里我们主要借助org.springframework.data.redis.core.RedisTemplate#executePipelined(org.springframework.data.redis.core.RedisCallback<?>),如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@Component
public class PipelineBean {

private RedisTemplate<String, String> redisTemplate;

public PipelineBean(RedisTemplate<String, String> redisTemplate) {
this.redisTemplate = redisTemplate;
}


public void counter(String prefix, String key, String target) {
// 请注意,返回的结果与内部的redis操作顺序是匹配的
List<Object> res = redisTemplate.executePipelined(new RedisCallback<Long>() {
@Override
public Long doInRedis(RedisConnection redisConnection) throws DataAccessException {
String mapKey = prefix + "_mp_" + key;
String cntKey = prefix + "_cnt_" + target;

redisConnection.openPipeline();
redisConnection.incr(mapKey.getBytes());
redisConnection.incr(cntKey.getBytes());
return null;
}
});
System.out.println(res);
}
}

上面的使用中,有几个注意事项

  • redisConnection.openPipeline(); 开启管道
  • 返回结果为列表,内部第一个redis操作,对应的返回结果塞在列表的下标0;依次…

II. 其他

0. 项目

1. 一灰灰Blog

尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

下面一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

一灰灰blog


打赏 如果觉得我的文章对您有帮助,请随意打赏。
分享到