• Redis的pipeline(管道),PHP使用pipeline


    pipline
    redis的pipeline(管道)功能在命令行中没有,但redis是支持pipeline的,而且在各个语言版的client中都有相应的实现。pipline可以打包n条命令,一次性传输到服务端,然后再一次性按顺序返回命令的执行结果。

    需要注意的是集群模式对于pipline不太友好,因为pipline要操作的key可能在不同的哈希槽上,此时就需要进行请求的转发,但是这是与pipline的思想相违背的,所以集群模式下不太支持使用pipline的操作。

    如果你操作的是字符串类型那么可以用mset和mget,key越多,mset和mget相对于pipeline越快。

    PHP使用

    $users = [1, 2, 3, 4];
    $predis = app('redis')->connection()->client();
    $user_values = $predis->pipeline(function ($pipe) use ($users) {
    foreach ($users as $val) {
    $pipe->get('test' . $val);
    }
    });
    dump($user_values);


    结果:


    ————————————————
    版权声明:本文为CSDN博主「msw、」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/minshiwang/article/details/104654004/


    redis的批量操作命令pipeline(PHP实现)

    redis执行一条命令有四个过程:发送命令、命令排队、命令执行、返回结果;整个过程是一个往返时间(RTT)。如果有n条命令,就会消耗n次RTT。Redis的客户端和服务端可能部署在不同的机器上。在两地的数据传输受网络速度的影响,消耗n次的RTT会增加网络成本,这个和Redis的高并发高吞吐特性背道而驰。
    use Redis;
    
    class RedisTest
    {
        const PORT = 6379;
    
        /**
         * redis对象
         */
        public $redis = null;
    
        public function __construct()
        {
            $this->redis = new Redis();
            $this->redis->connect('127.0.0.1', self::PORT);
        }
        
        public function testPipeline()
        {
            $str_constant = get_class($this->redis) . '::PIPELINE';
            if (!$str_constant) {
                return 'pipeline no exit';
            }
            
            return $this->redis->pipeline()->publish('test', 'pipe-info')->exec();
        }
    }
  • 相关阅读:
    把安卓QQ浏览器下载的视频m3u8列表文件转成mp4格式(或者其它视频格式)
    Win8系统删除历史用户本地头像
    大叔郑州街头卖刀 这口才应该上春晚啊
    从尽力而为到全力以赴
    用虚假邮箱注册微博
    百度网盘总结
    试用Sublime Text 3
    玉米地烧毁,相关部门让找鸟儿去索赔
    Video Download Helper总结
    9.29
  • 原文地址:https://www.cnblogs.com/rxbook/p/15128366.html
Copyright © 2020-2023  润新知