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

  • 相关阅读:
    负载均衡
    二叉树反转
    hashMap 和红黑树
    linux c++ 服务器编程,收藏一个测试例子
    某某音乐盒面试
    Linux中的文件i节点
    linux 文件格式压缩
    类string的构造函数、拷贝构造函数和析构函数
    计算二叉树的深度
    string转换为decimal
  • 原文地址:https://www.cnblogs.com/loveyouyou616/p/5415552.html
Copyright © 2011-2022 走看看