5 redis管道

什么是redis管道首先看一个例子

public static void test100w(){

   //第一个例子是直接用put插入
    Jedis jedis = new Jedis("172.30.154.123",6379);
    jedis.auth("123456"); 
   long start = System.currentTimeMillis();
    for (int i =0;i<100000;i++){
        jedis.set("key1"+i,"value"+i); 
   }
    long end = System.currentTimeMillis();
    System.out.println(end-start +"----普通set耗时");       

   //第二个使用管道
    start = System.currentTimeMillis();
    Pipeline p = jedis.pipelined();
    for (int i =0;i<100000;i++){ 
       p.set("key2"+i,"value"+i);
    }
    p.sync();
    end = System.currentTimeMillis(); 
   System.out.println(end-start +"----管道耗时");
    jedis.close();    }

我本机的执行结果是:

109539----普通set耗时
497----管道耗时

第一个直接set的,如果用多线程跑,会快一点,但是不可能达到管道这个时间。

为什么管道这么快

管道的定义:客户端可以向服务器发送多个请求,而不必等待回复,并最终在一个步骤中读取回复。
正常情况下,每个请求命令发出后client通常会阻塞并等待redis服务处理,redis处理完后请求命令后会将结果通过响应报文返回给client。
那么有没有这种情况client不用读取返回结果,redis依旧可以处理新请求。这就是管道(Pipeline)
通过pipeline方式当有大批量的操作时候。我们可以节省很多原来浪费在网络延迟的时间。需要注意到是用pipeline方式打包命令发送,redis必须在处理完所有命令前先缓存起所有命令的处理结果。
打包的命令越多,缓存消耗内存也越多。所以并是不是打包的命令越多越好。
具体多少合适需要根据具体情况测试。当然,使用Pipeline需要一定的容错性。并不是所有的提交都会被成功执行,如果不能成功执行,那么会在所有提交执行之后打印错误。也就是说管道中前面命令失败,后面命令不会有影响,继续执行。

管道的其他用法

其实管道和普通的的Jedis之类一样,有相同的方法。比如set,get,hmset等等。自己去实验吧。
这里我说的是用管道去删除有相同特性的的key。
我没用代码,直接用命令行的下面两个是一样的,一个是有密码,一个是没密码连接redis而已。主要的还是keys "key*" 这里,我是删除了刚刚插入的所有开头为key的键

src/redis-cli keys "key*" | xargs src/redis-cli del

src/redis-cli -h 172.30.154.123 -p 6379 -a 123456 keys "key*" | xargs src/redis-cli -h 172.30.154.123 -p 6379 -a 123456 del

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • 安全性 设置客户端连接后进行任何其他指令前需要使用的密码。 警告:因为redis 速度相当快,所以在一台比较好的服...
    OzanShareing阅读 1,832评论 1 7
  • 本文将从Redis的基本特性入手,通过讲述Redis的数据结构和主要命令对Redis的基本能力进行直观介绍。之后概...
    kelgon阅读 61,281评论 23 625
  • 1.1 资料 ,最好的入门小册子,可以先于一切文档之前看,免费。 作者Antirez的博客,Antirez维护的R...
    JefferyLcm阅读 17,120评论 1 51
  • 在之前的文章中,我们对redis批量处理指令mget进行了压测并分析了性能瓶颈,显然通过mget批量执行指令可以节...
    近路阅读 39,762评论 4 18