在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

redis中如何使用pipeline

151次阅读
没有评论

共计 2282 个字符,预计需要花费 6 分钟才能阅读完成。

这篇文章主要为大家展示了“redis 中如何使用 pipeline”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让丸趣 TV 小编带领大家一起研究并学习一下“redis 中如何使用 pipeline”这篇文章吧。

redis 是一个 cs 模式的 tcp server,使用和 http 类似的请求响应协议。一个 client 可以通过一个 socket 连接发起多个请求命令。每个请求命令发出后 client 通常 会阻塞并等待 redis 服务处理,redis 处理完后请求命令后会将结果通过响应报文返回给 client。基本的通信过程如下
Client: INCR X
Server: 1
Client: INCR X
Server: 2
Client: INCR X
Server: 3
Client: INCR X
Server: 4
基 本上四个命令需要 8 个 tcp 报文才能完成。由于通信会有网络延迟, 假如从 client 和 server 之间的包传输时间需要 0.125 秒。那么上面的四个命 令 8 个报文至少会需要 1 秒才能完成。这样即使 redis 每秒能处理 100 个命令,而我们的 client 也只能一秒钟发出四个命令。这显示没有充分利用 redis 的处理能力。除了可以利用 mget,mset 之类的单条命令处理多个 key 的命令外
我们还可以利用 pipeline 的方式从 client 打包多条命令一起发出,不需要等待单条命令的响应返回,而 redis 服务端会处理完多条命令后会将多条命令的处理结果打包到一起返回给客户端。通信过程如下

Client: INCR X
Client: INCR X
Client: INCR X
Client: INCR X
Server: 1
Server: 2
Server: 3
Server: 4

假 设不会因为 tcp 报文过长而被拆分。可能两个 tcp 报文就能完成四条命令,client 可以将四个 incr 命令放到一个 tcp 报文一起发送,server 则可以将四条命令 的处理结果放到一个 tcp 报文返回。通过 pipeline 方式当有大批量的操作时候。我们可以节省很多原来浪费在网络延迟的时间。需要注意到是用 pipeline 方式打包命令发送,redis 必须在处理完所有命令前先缓存起所有命令的处理结果。打包的命令越多,缓存消耗内存也越多。所以并是不是打 包的命令越多越好。具体多少合适需要根据具体情况测试。下面是个 jredis 客户端使用 pipeline 的测试
package jredisStudy;
import org.jredis.JRedis;
import org.jredis.connector.ConnectionSpec;
import org.jredis.ri.alphazero.JRedisClient;
import org.jredis.ri.alphazero.JRedisPipelineService;
import org.jredis.ri.alphazero.connection.DefaultConnectionSpec;
public class PipeLineTest {
    public static void main(String[] args) {
        long start =System.currentTimeMillis();
        usePipeline();
        long end =System.currentTimeMillis();
        System.out.println(end-start);

        start = System.currentTimeMillis();
        withoutPipeline();
        end =System.currentTimeMillis();
        System.out.println(end-start);
 
    }
   
    private static void withoutPipeline()
    {
       try { 
          JRedis jredis = new JRedisClient(192.168.56.55 ,6379);
           for(int i =0 ; i 100000 ; i++)
            {
              jredis.incr(test2
            }
           jredis.quit();
     } catch (Exception e) {
     }
    }

    private static void usePipeline() {
     try {
         ConnectionSpec spec =DefaultConnectionSpec.newSpec(192.168.56.55 , 6379, 0, null);
         JRedis jredis = newJRedisPipelineService(spec);
         for(int i =0 ; i 100000 ; i++)
         {
           jredis.incr(test2
         }
         jredis.quit();
     } catch (Exception e) {
     }
    }
}
输出
103408 // 使用了 pipeline
104598 // 没有使用

测试结果不是很明显,这应该是跟我的测试环境有关。我是在自己 win 连接虚拟机的 linux。网络延迟比较小。所以 pipeline
优势不明显。如果网络延迟小的话,最好还是不用 pipeline。除了增加复杂外,带来的性能提升不明显。

以上是“redis 中如何使用 pipeline”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-25发表,共计2282字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 国产精品视频在线播放 | 久久99精品久久久久婷婷 | 中日韩欧美在线观看 | 欧美性天堂| 在线播放a 1| 国产欧美另类久久久精品不卡 | 这里有精品视频 | 日本久久中文字幕精品 | 国产亚洲女人久久久久久 | 特级片在线观看 | 天堂av无码av日韩av | 人妻精品动漫h无码中字 | 伊人久久大香线蕉av色婷婷色 | 免费观看的毛片手机视频 | 国产成人精品日本亚洲999 | 精品久久人人妻人人做精品 | 亚洲国内自拍愉拍 | 亚洲高清色 | 午夜精品久久久久久久99热浪潮 | 日韩一级片视频 | 久草国产精品 | 特级淫片aaaaa片毛片 | 久久精品视频一区二区三区 | 国产男男做爰免费视频 | 91免费国产在线观看 | 成人午夜精品网站在线观看 | 图片区欧美色图 | 在线a视频网站 | 色性综合| 最近2019年好看中文字幕视频 | 乱码在线 | 日韩欧美一区二区三区不卡 | 欧美精品网站 | 99re热视频这里只精品 | 欧美奶涨边摸边做爰视频 | jjzz亚洲亚洲女人 | 99re6在线视频精品免费 | 久久久久无码专区亚洲av | 最新国产精品精品视频 | 又大又粗又长的高潮视频 | 特黄女一级毛片 |