2011-02-11 65 views
0

我这个代码在PHP中使用的memcache:为什么不循环运行“确定”次数?

<?php 

$memcache = new Memcache; 
$memcache->connect('localhost', 11211) or die ("Could not connect"); 

$version = $memcache->getVersion(); 
echo "Server's version: ".$version."<br/>\n"; 

$tmp_object = new stdClass; 
$tmp_object->str_attr = 'test'; 
$tmp_object->int_attr = 123; 

$memcache->set('key', $tmp_object, false, 1) or die ("Failed to save data at t\ 
he server"); 
echo "Store data in the cache (data will expire in 1 second)<br/>\n"; 
$i=0; 
do{ 
    $get_result = $memcache->get('key'); 
    echo "Data from the cache:<br/>\n"; 
    var_dump($get_result); 
    $i++; 
}while($get_result); 
echo $i; 
var_dump($get_result); 

$ i的值是不同的,每次..有时候是140,有时候是900+,等等......为什么会改变?

编辑 - 顺便说一句,这是一个示例程序memcached从PHP网站的小改动。

编辑
我想我是不会的问题不够清楚:
我的意思是问,为什么用$memcache->get('key')执行需要更多的CPU时间在某些情况下,当需要在其他情况下更少的CPU时间。
=>更多循环意味着$memcache->get('key')碰巧需要更少的时间,更少的循环意味着需要更多的CPU时间。
请记住,缓存设置为在1秒内过期,并执行do - while,直到它到期。

+0

$ i反映了您拥有的$ memcache-> get /'key'项目的数量。只要有,$ i递增1.在循环结束时,打印出循环的次数为 – 2011-02-11 06:35:18

+0

`while循环(或`do ... while`循环)不是定时循环电脑了。至少现在还没有......至少十年左右。 – 2011-02-11 06:35:49

+0

@Damien Pirsy:@Ignacio:问题更新,以更清楚地反映我的想法:)现在请再看看...谢谢 – Shrinath 2011-02-11 06:46:48

回答

1

您的循环不断运行,并且一遍又一遍地读取相同的密钥,直到它从memcache中删除。

该键的过期时间设置为1秒,因此循环运行的次数是可以在1秒内读取该值的次数。到期时间只是一个迹象。它不一定要精确到毫秒1秒。而且脚本的速度也可能取决于其他各种情况,所以这个计数器不是很可靠。

-2

$ i被打印在循环的边上,只要你的while循环条件变为真.. $我会得到增量,所以你会得到不同的结果。