1)什么是流水线
批量传递n条命令给Redis服务器执行,节省n-1次网络传输时间。
注意:
Redis命令的执行时间是微秒级别
pipline每次条数要控制(网络)
![](https://img.haomeiwen.com/i13617909/6fe0c8fc6407368e.png)
2)客户端实现
/**
* 环境:Redis5.0.4 : 本机redis-server 1万次 hset
* 608ms
*/
public static void bigHashMap(Jedis jedis) {
System.out.println("--->Starting set bigMap");
long t1 = System.currentTimeMillis();
for(int i = 0; i < 10000; i++)
jedis.hset("bigMap01", "key"+i, "value"+i);
long t2 = System.currentTimeMillis();
System.out.println("--->set bigMap is endding! It takes " + (t2-t1) + "ms");
}
/**
* 环境:Redis5.0.4 : 本机redis-server 用pipeline 1万次 hset
* 125ms
*/
public static void bigHashMapPiepline(Jedis jedis) {
System.out.println("--->Starting pipeline set bigMap");
long t1 = System.currentTimeMillis();
Pipeline piepline = jedis.pipelined();
for(int i = 0; i < 10000; i++)
piepline.hset("bigMap02", "key"+i, "value"+i);
piepline.syncAndReturnAll();
long t2 = System.currentTimeMillis();
System.out.println("--->pipeline set bigMap is endding! It takes " + (t2-t1) + "ms");
}
3)与原生操作Mset Mget M~对比
原生的m操作是原子操作
pipeline非原子,pipeline会在服务器端被拆分成独立的命令执行
4)使用建议
- 注意每次pipeline携带数据量
- pipeline每次只能作用在一个Redis节点上
- M操作与pipeline的区别
网友评论