zoukankan      html  css  js  c++  java
  • redis中multi和pipeline区别以及效率(推荐使用pipeline)

      手册得知 pipeline 只是把多个redis指令一起发出去,redis并没有保证这些指定的执行是原子的;multi相当于一个redis的transaction的,保证整个操作的原子性,避免由于中途出错而导致最后产生的数据不一致。通过测试得知,pipeline方式执行效率要比其他方式高10倍左右的速度,启用multi写入要比没有开启慢一点。

      上代码,望高手指点。

    <?php
    set_time_limit(0);
    ini_set('memory_limit','1024M');
    
    $redis = new Redis();
    
    G('1');
    $redis->connect('127.0.0.1');
    //不具备原子性 ,管道
    $redis->pipeline();
    for ($i=0;$i<100000;$i++)
    {
        $redis->set("test_{$i}",pow($i,2));
        $redis->get("test_{$i}");
    }
    $redis->exec();
    $redis->close();
    G('1','e');
    
    
    G('2');
    $redis->connect('127.0.0.1');
    //事物具备原子性
    $redis->multi();
    for ($i=0;$i<100000;$i++)
    {
        $redis->set("test_{$i}",pow($i,2));
        $redis->get("test_{$i}");
    }
    $redis->exec();
    $redis->close();
    G('2','e');
    
    
    //普通
    G('3');
    $redis->connect('127.0.0.1');
    //事物具备原子性
    for ($i=0;$i<100000;$i++)
    {
        $redis->set("test_{$i}",pow($i,2));
        $redis->get("test_{$i}");
    }
    $redis->close();
    G('3','e');
    
    function G($star,$end = '')
    {
        static $info = array();
        if (!empty($end))
        {
            $info[$end] = microtime(true);
            $sconds = $info[$end] - $info[$star];
            echo $sconds,"ms<br/>";
    
        } else {
            $info[$star] =  microtime(true);
        }
    }

    测试输出的结果:

    0.043839931488037ms
    0.4456958770752ms
    0.45916604995728ms

  • 相关阅读:
    自愿如此 四 内观
    自愿如此· 三 不做解释
    自愿如此·序言
    排序算法 (08.堆排序)
    2.2 ES6 解构赋值
    2.1 ES6 let 与 const
    ES6学习 (01. 内容概况)
    vue 技术栈进阶 (07. ajax 请求实战)
    vue技术栈进阶(06.状态持久化, 严格模式, 数据双向绑定问题)
    vue技术栈进阶(05. mutations, actions)
  • 原文地址:https://www.cnblogs.com/loveyouyou616/p/5415552.html
Copyright © 2011-2022 走看看