Redis的性能是很好的,但是仍然有其性能上限.Redis提供了Pipline功能,可以在某些场景下极大的提升qps.
先介绍两个概念:Request/Response protocols
和 RTT
.
Redis是一个使用TCP进行通讯的C/S架构,也被叫做请求/响应协议
.
也就是说在redis处理一条命令的时候,需要:
可以发现在这个过程中有两个信息的发送事件,这个事件叫做RTT(Round Trip Time).pipline主要节省的就是rtt时间.
我们使用的客户端为Jedis,分别进行10000
,100000
次操作,邮箱变量有本地redis以及远程redis(因为远程通信的网络延迟一般也是避免不了的).测试结果如下:
times | 不使用pipline | 使用pipline |
---|---|---|
本地10000 | 406ms | 38ms |
本地100000 | 3557ms | 131ms |
远程10000 | 43641ms | 76ms |
远程100000 | 388632ms | 3433ms |
从实验结果可以看出,RTT占用的时间是非常大的,远远比redis本身处理命令占用的时间更多.因此在提升性能的时候,我们应该首先节省RTT时间.
测试代码如下:
public static void main(String[] args) {
Ticker ticker = new Ticker();
Jedis jedis = new Jedis("localhost");
jedis.select(2);
ticker.tick("start");
for (int i = 0; i < TIMES; i++) {
jedis.incr(i + "_1");
}
ticker.tick("no pip");
Pipeline pipeline = jedis.pipelined();
for (int i = 0; i < TIMES; i++) {
pipeline.incr(i + "_2");
}
ticker.tick("pip");
System.out.println(ticker.toString());
}
完。
2019-06-13 完成
以上皆为个人所思所得,如有错误欢迎评论区指正。
欢迎转载,烦请署名并保留原文链接。
联系邮箱:huyanshi2580@gmail.com
更多学习笔记见个人博客——>呼延十
var gitment = new Gitment({ id: 'Redis的pipline测试', // 可选。默认为 location.href owner: 'hublanker', repo: 'blog', oauth: { client_id: '2297651c181f632a31db', client_secret: 'a62f60d8da404586acc965a2ba6a6da9f053703b', }, }) gitment.render('container')