在我的网站上有一个php函数func1()
,它从其他资源获取一些信息。运行此功能的成本非常高。
我希望当Visitor1访问我的网站时,执行此func1()
并将值存储在$variable1=func1();
中的文本文件中(或其他内容,但不是数据库)。
然后开始5分钟的时间间隔,在此间隔期间,Visitor2访问我的网站,然后他从文本文件中获取值而不调用函数func1()
。
当Visitor3进入20分钟时,应该再次使用该功能并将新值存储5分钟。
如何制作?一个小的工作示例会很好。
答案 0 :(得分:2)
将其存储在一个文件中,并使用filemtime()
.检查文件的时间戳。如果它太旧,请刷新它。
$maxage = 1200; // 20 minutes...
// If the file already exists and is older than the max age
// or doesn't exist yet...
if (!file_exists("file.txt") || (file_exists("file.txt") && filemtime("file.txt") < (time() - $maxage))) {
// Write a new value with file_put_contents()
$value = func1();
file_put_contents("file.txt", $value);
}
else {
// Otherwise read the value from the file...
$value = file_get_contents("file.txt");
}
注意:已经有专门的缓存系统,但是如果你只需要担心这个值,这是一个简单的缓存方法。
答案 1 :(得分:2)
您要完成的任务称为缓存。您在此处看到的其他一些答案描述了最简单的缓存:文件。缓存还有许多其他选项,具体取决于数据大小,应用程序需求等。
以下是一些缓存存储选项:
您还可以缓存许多内容。以下是一些:
对于一种简单但可配置的缓存方式,您可以使用Zend Framework中的Zend_Cache组件。这可以单独使用,而不必将整个框架用作described in this tutorial。
我看到有人说使用Sessions。这是不您想要的,因为会话仅对当前用户可用。
以下是使用Zend_Cache的示例:
include ‘library/Zend/Cache.php’;
// Unique cache tag
$cache_tag = "myFunction_Output";
// Lifetime set to 300 seconds = 5 minutes
$frontendOptions = array(
‘lifetime’ => 300,
‘automatic_serialization’ => true
);
$backendOptions = array(
‘cache_dir’ => ‘tmp/’
);
// Create cache object
$cache = Zend_Cache::factory(‘Core’, ‘File’, $frontendOptions, $backendOptions);
// Try to get data from cache
if(!($data = $cache->load($cache_tag)))
{
// Not found in cache, call function and save it
$data = myExpensiveFunction();
$cache->save($data, $cache_tag);
}
else
{
// Found data in cache, check it out
var_dump($data);
}
答案 2 :(得分:1)
在文本文件中。最省钱的方式(差不多)。或者使用cronjob在访问时每隔5分钟运行一次带有该功能的脚本。
答案 3 :(得分:0)
使用缓存,例如APC!
如果资源非常大,这可能不是最佳选择,文件可能确实更好。
看看: