- 在默认的情况下,Redis客户端是一条一条的发送命令给Redis服务器的,这样做的性能显然不高。在关系型数据库中我们可以使用批量操作,也就是需要执行SQL是,才一次性的发送所有SQL去执行,这样性能就可以提高很多了。对于Redis也是可以的,这边是流水线(pipline)技术,在很多情况下并不是Redis性能不佳,而是网络传输的速度造成的瓶颈,使用流水线后就可以大幅度的在需要执行很多命令的时候提升Redis的性能。
- 接下来进行测试:
//批量操作
@Test
public void execList() {
List list = redisTemplate.executePipelined((RedisOperations redisOperation) -> {
long startTime = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
redisOperation.opsForValue().set("K" + i, "v+i");
}
long endTime = System.currentTimeMillis();
log.info("1W次批量操作共计耗时" + (endTime - startTime));
return null;
}
);
}
最短的时间197ms;经过多次测试,时间在230-400ms之间:
//非批量操作
@Test
public void execList1() {
long startTime = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
redisTemplate.opsForValue().set("K" + i, "v+i");
}
long endTime = System.currentTimeMillis();
log.info("1W次操作共计耗时" + (endTime - startTime));
}
最短的时间3515ms;经过多次测试,时间在4000-4500ms之间:
- 从测试用例可以看出批量操作相比于非批量操作速度提升了大约10倍