• Redis批量执行(如list批量添加)命令工具 —— pipeline管道应用


    前言

    1. Redis使用的是客户端-服务器(CS)模型和请求/响应协议的TCP服务器。这意味着通常情况下一个请求会遵循以下步骤:

      使用Redis管道提升性能

      (1)客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。
      (2)服务端处理命令,并将结果返回给客户端。

    2. 客户端和服务端通过网络进行连接。这样的连接可能非常快(在一个回路网络中),也可能非常慢(在广域网上经过多个结点才能互通的两个主机)。
    3. 但是无论是否存在网络延迟,数据包从客户端传输到服务端,以及客户端从服务端获得响应都需要花费一些时间。这段时间就称为往返时延(Round Trip Time)。
    4. 因此当客户端需要执行一串请求的时候,很容易看出它对性能的影响(例如往同一个队列中加入大量元素,或者往数据库中插入大量的键)。如果RTT时长为250毫秒(在基于广域网的低速连接环境下),即使服务器每秒可以处理10万个请求,但是实际上我们依然只能每秒处理最多4个请求。
    5. 如果处于一个回路网络中,RTT时长则相当短(我的主机ping 127.0.0.1时只需要0.063ms),但是如果你执行一大串写入请求的时候,还是会有点长。
    6. 如果需要一次执行多个redis命令,以往的方式需要发送多次命令请求,由redis服务器依次执行,并返回结果。
    7. 为了解决此类问题,设计者设计出了redis管道命令:客户端可以向服务器发送多个请求,而不必等待回复,并最终在一个步骤中读取回复返回给客户端,从而大大增加了协议性能。

    pipeline在php中的应用

    1. 管道的开启方式最主要是一条命令:$redis->pipeline()
    2. 批量给一个list类型的key添加10w条数据,实例如下:

      
      <?php
         $redis = new Redis();
         $redis->connect('127.0.0.1', 6379);
         $redis->auth('******');
         $redis->select(0);
         $redis->pipeline();//开启管道
         
         //假设变量$data数组有10w条数据,批量添加到list类型中
         $data = array(1,2,3,...,100000);
         $key = 'list1';
         foreach($data as $value){
             $redis->rpush($key,$value);
         }
      

    原文地址:https://segmentfault.com/a/1190000016889789

  • 相关阅读:
    4 linux上运行crm&uwsgi
    Vue 目录
    vue -(滚动播放-全屏展示)
    Chrome 调试技巧
    Vue 遇到的坑
    9 matplotlib
    Maven
    Dev-C++黑暗主体和代码高亮配置
    Git操作:一次push把代码提交到两个仓库
    windows server 2012 r2 快速启动 部署remoteapp 显示服务器有挂起的重启,怎么解决?
  • 原文地址:https://www.cnblogs.com/lalalagq/p/9963963.html
Copyright © 2020-2023  润新知