为什么循环不会“确定”次数?

时间:2011-02-11 06:27:34

标签: php memcached while-loop

我使用memcache在php中使用此代码:

<?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+等等......为什么它会改变?

编辑 - 顺便说一下,这是一个来自php网站memcached的示例程序,只有很小的改动。

修改
我想我对问题不够清楚:
我想问一下,为什么$memcache->get('key')执行在某些情况下需要更多的CPU时间,而在其他情况下需要更少的CPU时间。
=&GT;更多循环意味着$memcache->get('key')恰好花费更少的时间,更少的循环意味着花费更多的CPU时间 请记住,缓存设置为在1秒内过期,do - while执行直到它过期。

2 个答案:

答案 0 :(得分:1)

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

该键的过期时间设置为1秒,因此循环运行的次数是1秒内可以读取值的次数。到期时间只是一个指示。它不一定必须精确到1毫秒到毫秒。你的脚本的速度也取决于其他各种条件,所以这个计数器不是很可靠。

答案 1 :(得分:-2)

$ i在循环外部打印,只要你的while循环条件变为真。$ i将得到增量,所以你会得到不同的结果。