zoukankan      html  css  js  c++  java
  • redis 使用管道提升写入的性能[pipeline]

    看了手册的都知道multi这个命令的作用就好比是mysql的事务的功能,但是大家都知道事务吗,就是在操作的过程中,把整个操作当作一个原子来处理,避免由于中途出错而导致最后产生的数据不一致,而产生BUG ,Mysql的事务功能可以做到这点,但是在redis中的multi,手册中说是把多个命令当作个事务来处理,但是在真正的测试之后发现并没有所说的事务的功能,个人经过测试发现,只有把他watch命令结合起来用,方可显现出其具有事务的功能,所以这点很是迷惑,关键是有一点很诧异,当启用了multi命令之后整个redis的读写会相对于没有使用multi的的读写要慢一点,我通过读写100W条数据发现,他们的速度相差600多毫秒,搞不清楚为什么相差这么多!个人觉得没有必要,还是不要使用这个multi的为好!
    至于redis的pipeline命令,看手册都知道,它能够让(多条)执行命令简单的,更加快速的发送给服务器,但是没有任何原子性的保证,能不能保证原子性这个我没有测试,但是这个速度我测试了下,确实是吃了一惊啊!相比于没有使用pipeline的读写操作,使用了pipeline命令的操作要快12倍不止啊!这个效率高的。。。。
    下面是我的测试代码:欢迎拍砖。

    <?php
    
    set_time_limit(0);
    
    //计时函数
    function G($start,$end='',$dec=4)
    {
        static $_info = array();
        if (!empty($end))
        {
            if(!isset($_info[$end])) $_info[$end] = microtime(TRUE);
            $sconds = number_format(($_info[$end]-$_info[$start]), $dec) * 1000;
            echo "{$sconds}ms<br />";
        }
        else
        {
            $_info[$start] = microtime(TRUE);
        }
    }
    
    $redis = new Redis();
    $redis->connect('127.0.0.1');
    
    G('t');
    $redis->pipeline();
    for ($i=0; $i < 100000 ; $i++) { 
       $redis->set("test_{$i}", pow($i, 2));
       $redis->get('test_{$i}');
    }
    $redis->exec();
    G('t','r');
    
    G('m');
    $redis->multi();
    for ($i=0; $i < 100000 ; $i++) { 
       $redis->set("test_{$i}", pow($i, 2));
       $redis->get('test_{$i}');
    }
    $redis->exec();
    G('m','i');
    
    $redis->flushdb();
    
    G('f');
    for ($i=0; $i < 100000 ; $i++) { 
       $redis->set("test_{$i}", pow($i, 2));
       $redis->get('test_{$i}');
    }
    G('f','e');
    
    ?>

    这是返回的结果:
    //pipeline的执行时间
    1926.5ms
    //multi的执行时间
    27725.7ms
    //正常情况下
    24832.1ms

  • 相关阅读:
    php的错误处理机制
    php的自动加载函数spl_autoload_register和__autoload
    mysql日志配置
    01,易语言网页填表
    mac 的全文搜索
    react native 热更新
    码云的使用教程
    autolayout实现水平三等分
    mac命令行快捷键
    什么是延展性(Malleability,可鍛性)
  • 原文地址:https://www.cnblogs.com/hgj123/p/4646298.html
Copyright © 2011-2022 走看看