Redis第1️⃣1️⃣课 pipeline

1)什么是流水线

批量传递n条命令给Redis服务器执行,节省n-1次网络传输时间。

注意:
Redis命令的执行时间是微秒级别
pipline每次条数要控制(网络)

远距离传输大概网络耗时图

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)使用建议

  1. 注意每次pipeline携带数据量
  2. pipeline每次只能作用在一个Redis节点上
  3. M操作与pipeline的区别
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容