Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么循环不运行“确定”次数?_Php_Memcached_While Loop - Fatal编程技术网

Php 为什么循环不运行“确定”次数?

Php 为什么循环不运行“确定”次数?,php,memcached,while-loop,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 stdCla

我使用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时间。 =>更多的循环意味着$memcache->get'key花费的时间更少,更少的循环意味着花费更多的cpu时间。
请记住,缓存设置为在1秒内过期,do-while将一直执行到过期。

$i将打印在循环旁边,只要do-while循环条件为真。$i将获得增量,因此您将得到不同的结果。

您的循环将继续运行,并反复读取相同的键,直到它从memcache中删除


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

$i反映了您拥有的$memcache->get/'key'项的数量。只要有,$i增加1。在循环结束时,您将打印出它循环了多少次while循环或do。。。虽然循环不再是PC机上的定时循环。还没到。。。至少十年左右了。@Damien Pirsy:@Ignacio:问题更新以更清楚地反映我的想法:请现在再看一看。。。谢谢你,这是一个真正的答案。。。那么,你的意思是说memcached的计时器不准确,而且脚本的执行时间也会受到其他活动的影响。我不知道您的配置,但服务器也使用缓存,如果您有APC缓存或数据库或cron作业,这些都会对速度产生积极和消极的影响。如果您在live server上开发,甚至在live server上开发一个单独的环境,或者使用具有多个用户的服务器,这可能会显著影响性能。像for循环一样快的东西,如果有机会再运行半秒,就会返回完全不同的结果;我不知道它的所有细节,但它使用高分辨率计时器精确地以毫秒为单位清理数据似乎不合逻辑。您通过的过期时间以秒为单位。Memcache将运行某种内部cron作业,以检查哪些项目已过时并将其清除。这会经常运行,但不会太频繁,以至于您可以在其上构建准确的计时器。感谢gyan:helpful@Shrinath:谢谢你的评论。但这个网站是,获得帮助和帮助他人。一个小的修正会有所帮助。所以每个帖子都应该受到赞赏。因为,对任何帖子的回答都意味着会员的时间质量。