首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

关于mongodb ,redis,memcache其间见不乱理还乱的关系和作用

2013-12-10 
关于mongodb ,redis,memcache之间见不乱理还乱的关系和作用?php$mem new Memcache$mem-connect(127.

关于mongodb ,redis,memcache之间见不乱理还乱的关系和作用
<?php$mem = new Memcache;$mem->connect("127.0.0.1", 11211);$time_start = microtime_float();//保存数据for($i = 0; $i < 100000; $i ++){$mem->set("key$i",$i,0,3);}$time_end = microtime_float();$run_time = $time_end - $time_start;echo "用时 $run_time 秒\n";function microtime_float(){list($usec, $sec) = explode(" ", microtime());return ((float)$usec + (float)$sec);}?>

?

redis的测试代码如下:redis1.php 此代码大概需要10秒左右

<?php//连接$redis = new Redis();$redis->connect('127.0.0.1', 6379);$time_start = microtime_float();//保存数据for($i = 0; $i < 100000; $i ++){$redis->sadd("key$i",$i);}$time_end = microtime_float();$run_time = $time_end - $time_start;echo "用时 $run_time 秒\n";//关闭连接$redis->close();function microtime_float(){list($usec, $sec) = explode(" ", microtime());return ((float)$usec + (float)$sec);}?>

?

  如果需要在设置键值的同时设置过期时间,大概执行需要20秒左右,测试代码如下:redis2.php

<?php//连接$redis = new Redis();$redis->connect('127.0.0.1', 6379);$time_start = microtime_float();//保存数据for($i = 0; $i < 100000; $i ++){$redis->sadd("key$i",$i);$redis->expire("key$i",3);}$time_end = microtime_float();$run_time = $time_end - $time_start;echo "用时 $run_time 秒\n";//关闭连接$redis->close();function microtime_float(){list($usec, $sec) = explode(" ", microtime());return ((float)$usec + (float)$sec);}?>

?

  后来在网上发现redis有一个神奇的功能叫事务,通过multi原子性的将一段代码块依次执行,从而达到一个完整功能模块的执行。不幸的是,通过测试发现,采用multi方式执行代码时并没有减少请求次数,相反在执行multi指令和exec指令时都要发送请求,从而将运行时间变成了原来的四倍,即四条指令的运行时间。测试代码如下:redis3.php

<?php//连接$redis = new Redis();$redis->connect('127.0.0.1', 6379);$time_start = microtime_float();//保存数据for($i = 0; $i < 100000; $i ++){$redis->multi();$redis->sadd("key$i",$i);$redis->expire("key$i",3);$redis->exec();}$time_end = microtime_float();$run_time = $time_end - $time_start;echo "用时 $run_time 秒\n";//关闭连接$redis->close();function microtime_float(){list($usec, $sec) = explode(" ", microtime());return ((float)$usec + (float)$sec);}?>

?

?

  问题出现了瓶颈,有好多公司需要海量数据处理,每秒5000次远不能满足需求,然后由于redis主从服务器上比memcache有更大的优势,为了将来数据的着想,不得不使用redis,这时候出现了一种新的方式,即phpredis提供的pipline功能,该功能能够真正的将几条代码封装成一次请求,从而大大提高了运行速度,50万次的数据执行只有了58秒。测试代码如下:redis4.php

<?php//连接$redis = new Redis();$redis->connect('127.0.0.1', 6379);$time_start = microtime_float();//保存数据for($i = 0; $i < 100000; $i ++){  $pipe=$redis->pipeline();$pipe->sadd("key$i",$i);$pipe->expire("key$i",3);$replies=$pipe->execute();}$time_end = microtime_float();$run_time = $time_end - $time_start;echo "用时 $run_time 秒\n";//关闭连接$redis->close(); function microtime_float(){list($usec, $sec) = explode(" ", microtime());return ((float)$usec + (float)$sec);}?>

?  运用这个操作可以非常完美的将赋值操作和设置过期时间操作打包到一个请求去执行,大大提高了运行效率。

?

redis安装:http://mwt198668.blog.163.com/blog/static/48803692201132141755962/

memcache安装:http://blog.csdn.net/barrydiu/article/details/3936270

redis设置主从服务器:http://www.jzxue.com/fuwuqi/fuwuqijiqunyuanquan/201104/15-7117.html

memcache设置主从服务器:http://www.cnblogs.com/yuanermen/archive/2011/05/19/2051153.html

?来自:http://blog.csdn.net/a923544197/article/details/7594814

热点排行