背景:现在的数据已经写到了redis队列里面,完成了入栈的操作,后期打算从redis获取数据,完成出栈的操作,出栈后然后做一系列的逻辑处理

环境: VMware虚拟机  内存:1G   硬盘:60G  php环境:PHP Version 5.6.31  php框架:TP

测试:事先在redis里面插入了30W条数据,分别模拟php单进程和多进程(3个多进程)

php单进程代码:

public function sinsert() {
        //$redis = new Redis();  
        //$redis->connect('127.0.0.1', 6379);
        //写到list类型缓存里面
        //lpush('zc_hk_list', serialize($zc_hk))
        //$accountRepayModel = D('AccountRepay');
        $this->repay->start();
        for($i=1;$i<=300000;$i++) {
          $arr = array("k"=>$i,"v"=>"dan".$i);
          //var_dump($arr);//exit;         
            $this->redis->lpush('hongniu', serialize($arr));
        }
        $this->repay->stop();
        $spent_time = $this->repay->spent($echo=true, '全量写入redis数据发送脚本');
        $this->repay->clear();
        /*$key = 'name';
        $value = $redis->get($key);
        var_dump($value);*/
    }
    public function slist() {
        $this->repay->start();
        $list_len  = $this->redis->llen('hongniu');
        Log::write('单进程一共有:'.$list_len."条");

if ($list_len == 0) return;
        while (true) {
            //$result     = $this->redis->rpop('hongniu');
            $result     = $this->redis->lpop('hongniu');
            if(empty($result)) {break;}
            $repayment_data= unserialize($result);
            if(is_array($repayment_data) && !empty($repayment_data)) {
             //Log::write('多进程写日志的结果是1:'.json_encode($repayment_data));
             Log::write('单进程写日志的结果是:'.json_encode($repayment_data));
            }
        }
        $this->repay->stop();
        $spent_time = $this->repay->spent($echo=true, '单进程导出redis数据脚本');
        $this->repay->clear();
    }

php多进程代码:

public function binsert() {
        //$redis = new Redis();  
        //$redis->connect('127.0.0.1', 6379);
        //写到list类型缓存里面
        //lpush('zc_hk_list', serialize($zc_hk))
        //$accountRepayModel = D('AccountRepay');
        $this->redis80 = new Redis();
        $this->redis80->connect('127.0.0.1', 6380);
        
        $this->redis81 = new Redis();
        $this->redis81->connect('127.0.0.1', 6381);
        $this->repay->start();
        for($i=1;$i<=300000;$i++) {
          $arr = array("k"=>$i,"v"=>"dan".$i);
          //var_dump($arr);//exit;
          if($i%3==0) {
            $this->redis->lpush('hongniu0', serialize($arr));
          }elseif($i%3==1) { //
            $this->redis80->lpush('hongniu1', serialize($arr));
          }else{
            $this->redis81->lpush('hongniu2', serialize($arr));
          }
        }
        $this->repay->stop();
        $spent_time = $this->repay->spent($echo=true, '全量分别写入不同redis数据发送脚本');
        $this->repay->clear();
        /*$key = 'name';
        $value = $redis->get($key);
        var_dump($value);*/
    }
    public function blist1() {
        $this->repay->start();
        $list_len  = $this->redis->llen('hongniu0');
        Log::write('多进程一一共有:'.$list_len."条");
     
        if ($list_len == 0) return;
        
        while (true) {
            //$result     = $this->redis->rpop('hongniu');
            $result     = $this->redis->lpop('hongniu0');
            if(empty($result)) {break;}
            $repayment_data= unserialize($result);
            if(is_array($repayment_data) && !empty($repayment_data)) {
             //Log::write('多进程写日志的结果是1:'.json_encode($repayment_data));
              Log::write('多进程写日志的结果是1:'.json_encode($repayment_data), Log::INFO, Log::FILE, LOG_PATH.'blist1_'.date('Ymd').'.log');
            }
        }
        $this->repay->stop();
        $spent_time = $this->repay->spent($echo=true, '多进程导出redis数据脚本1');
        $this->repay->clear();
    }  
    public function blist2() {
        $this->redis80 = new Redis();
        $this->redis80->connect('127.0.0.1', 6380);

$this->repay->start();
        $list_len  = $this->redis80->llen('hongniu1');
        Log::write('多进程二一共有:'.$list_len."条");
        if ($list_len == 0) return;
        
        while (true) {
            //$result     = $this->redis->rpop('hongniu');
            $result     = $this->redis80->lpop('hongniu1');
            if(empty($result)) {break;}
            $repayment_data= unserialize($result);
            if(is_array($repayment_data) && !empty($repayment_data)) {
             //Log::write('多进程写日志的结果是1:'.json_encode($repayment_data));
              Log::write('多进程写日志的结果是2:'.json_encode($repayment_data), Log::INFO, Log::FILE, LOG_PATH.'blist2_'.date('Ymd').'.log');
            }
        }
        $this->repay->stop();
        $spent_time = $this->repay->spent($echo=true, '多进程导出redis数据脚本2');
        $this->repay->clear();
    }  
    public function blist3() {

$this->redis81 = new Redis();
        $this->redis81->connect('127.0.0.1', 6381);
        
        $this->repay->start();
        $list_len  = $this->redis81->llen('hongniu2');
        Log::write('多进程三一共有:'.$list_len."条");
        if ($list_len == 0) return;
        
        while (true) {
            //$result     = $this->redis->rpop('hongniu');
            $result     = $this->redis81->lpop('hongniu2');
            if(empty($result)) {break;}
            $repayment_data= unserialize($result);
            if(is_array($repayment_data) && !empty($repayment_data)) {
             //Log::write('多进程写日志的结果是1:'.json_encode($repayment_data));
              Log::write('多进程写日志的结果是3:'.json_encode($repayment_data), Log::INFO, Log::FILE, LOG_PATH.'blist3_'.date('Ymd').'.log');
            }
        }
        $this->repay->stop();
        $spent_time = $this->repay->spent($echo=true, '多进程导出redis数据脚本3');
        $this->repay->clear();
    }

shell代码:

curl http://192.168.32.128/index.php/Business/blist1
curl http://192.168.32.128/index.php/Business/blist2
curl http://192.168.32.128/index.php/Business/blist3

测试结果如下所示:

总结:因为redis是单进程单线程的,在只有一个redis实例的情况下,不管开启多少个进程,读取速度不会变快!

所以想要读取速度加快可以开启多个redis实例,写入的时候写入到多个redis实例中,读取的时候也是从多个redis实例读取。

shell模拟php多进程从redis获取数据(多个redis实例)相关推荐

  1. shell模拟php多进程从redis获取数据(一个库多个key值)

    背景:现在的数据已经写到了redis队列里面,完成了入栈的操作,后期打算从redis获取数据,完成出栈的操作,出栈后然后做一系列的逻辑处理 环境: VMware虚拟机  内存:1G   硬盘:60G  ...

  2. shell模拟php多进程从redis获取数据

    背景:现在的数据已经写到了redis队列里面,完成了入栈的操作,后期打算从redis获取数据,完成出栈的操作,出栈后然后做一系列的逻辑处理 环境: VMware虚拟机  内存:1G   硬盘:60G  ...

  3. shell模拟php多进程从redis获取数据(多个库)

    背景:现在的数据已经写到了redis队列里面,完成了入栈的操作,后期打算从redis获取数据,完成出栈的操作,出栈后然后做一系列的逻辑处理 环境: VMware虚拟机  内存:1G   硬盘:60G  ...

  4. redis php数据插入失败,redis插入数据,恢复数据测试(禁止淘汰策略下恢复大于redis内存限制数据情况)...

    环境准备: redis php的redis扩展 redis version=4.0.8 php version: php version.png php redis extension: php re ...

  5. php redis获取incr的值,Redis Incr命令

    Redis Incr命令 Redis Incr 命令将 key 中储存的数字值增一. 如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作. 如果值包含错误的类型, ...

  6. Java项目使用Redis缓存数据

    Java项目使用Redis缓存数据 一.Redis的下载安装 1.下载gcc编译器 yum install gcc-c++ 安装完成后检查是否安装成功,查看版本 gcc --version 2.使用w ...

  7. 05-使用Redis缓存数据,管理员相关数据表

    文章目录 使用Redis缓存数据 管理员相关数据表 使用Redis缓存数据 使用Redis可以提高查询效率,一定程度上可以减轻数据库服务器的压力,从而保护了数据库. 通常,应用Redis的场景有: 高 ...

  8. echarts模拟从数据库异步加载数据

    前言 前面的几篇小例子中,echarts数据都是写死在js中的,但是在实际echarts中,数据都是从数据库中动态获取过来.所以这里来简单演示一下echarts怎么通过ajax异步获取数据库中的数据在 ...

  9. oracle 从别的数据库获取数据 ,访问其他数据库

    在某个oracle数据库,获取其他oracle数据库中的数据,需要建立database link,在使用语句获取数据 假设前置机实例名prod,你要查询的用户scott密码tiger在本机:creat ...

最新文章

  1. Gym 101606 F-Flipping Coins(概率dp)
  2. 嫦娥奔月(KMP,找循环节)及其扩展KMP
  3. hdu 5037 Frog 贪心 dp
  4. python实操题_Python100道练习题,光看不练假把式,Python实操资源
  5. Python类的多态
  6. vue 接口数据排序_Vue 使用 axios 请求 mock 模拟接口的数据
  7. GTS--阿里巴巴分布式事务全新解决方案
  8. C# async 和 await 理解
  9. 女子800米跑进4分30秒才合格,茅台回应应聘者需体测...
  10. python基础安装第三方(十三)
  11. java设计模式迭代器模式_Java中的迭代器设计模式
  12. 【C++】继承时构造函数和析构函数
  13. perl语言书籍教程推荐
  14. php退款,PHP实现微信申请退款流程的方法
  15. Udacity 自动驾驶工程师学习笔记(二)——深度学习(1)
  16. 专门画像素图的软件_画像素的软件
  17. 微信升级后不再使用x5内核,debugx5.qq.com打不开,如何开启微信调试?
  18. 腾讯零反射全动态Android插件框架Shadow解析
  19. 深入浅出Pytorch函数——torch.arange
  20. flink GROUPING SETS多维度聚合、设置Table state 到期时间

热门文章

  1. freetds mysql_apache+mysql+php+gd+freetds
  2. l2高斯分布_L1和L2正则的区别,如何选择L1和L2正则?L1在0处不可导,怎么处理...
  3. 第29天:控制进度,控制进度知识点,敏捷中控制进度知识点
  4. 解决中文乱码的问题要考虑的8个地方|(utf-8,用于抛砖引玉)
  5. 查询每个班级排名第三的学生
  6. 打开高效文本编辑之门_Linux sed之模式空间与保留空间
  7. Python 线性回归
  8. 雷林鹏分享:Yii(yiiframework)框架(二):建立第一个Yii应用
  9. 【Node】常用基础 API 整理
  10. swift4.2 - 一个自定义view弹框