在页面加载PHP时,是否可以只查询数据库一次。以某种方式存储这些结果并在后续报告中将其显示给用户。有没有办法确定数据库中是否有更改内容,以便我们只能连接到数据库才能获取新的/更改的结果?
请给我一些想法。 感谢。
答案 0 :(得分:1)
查看MySQL查询缓存。
当没有需要更改时,MySQL将返回存储在内存中的相同结果集。
http://dev.mysql.com/tech-resources/articles/mysql-query-cache.html
答案 1 :(得分:1)
缓存,如APC,memcached或Xcache通常具有生存期,然后才会变得陈旧。只要缓存不是陈旧的,就不会对数据库进行任何调用。请注意, no 调用优于数据库中的缓存记录集,因为没有调用会保存整个往返。
如果您的应用程序是数据库的唯一写入源,则只要有人写入数据库,您就可以手动强制缓存在设置生命周期之前到期。然后,当运行查询时,后续查询将重新缓存。
如果有其他来源,例如远程服务器,您必须在数据库中实现一个触发器,该触发器使用更改数据库通知所有应用程序。消息队列最适合用于此目的。
答案 2 :(得分:1)
有一个函数from here,它包装任何其他函数,缓存结果:
function cache_function($buildCallback, array $args= array (), $timeoutMinutes= 60) {
if (is_array($buildCallback)) {
$cacheKey= get_class($buildCallback[0]) . $buildCallback[1] . ':' . implode(':', $args);
} else
$cacheKey= $buildCallback . ':' . implode(':', $args);
$file_path= CACHE_PATH . md5($cacheKey);
@ $file_time= filemtime($file_path);
$rebuild= $file_time < time() - ($timeoutMinutes * 60);
//$rebuild= false; // FORCE REBUILD SKIP for WINDOWS
if ($rebuild or (!$rebuild and !is_readable($file_path))) {
$build= call_user_func_array($buildCallback, $args);
file_put_contents($file_path, serialize($build), LOCK_EX);
return $build;
}
return unserialize(file_get_contents($file_path));
}
另见:
http://blog.digitalstruct.com/2008/02/27/php-performance-series-caching-techniques/
答案 3 :(得分:0)
您可以在数据表中使用其他字段,例如,显示上次记录修改时间戳。然后你可以使用memcache(或另一个缓存子系统)并将其保存到带有最后修改时间戳的读取数据库结果中。
在唯一一个数据库查询中,您可以选择此字段(使用轻型SQL查询和select语句中描述的字段),并将其与从DB值中获取的数据进行比较。如果它们不同,您就知道从具有复杂查询的DB获取新数据。
“轻量级”SQL查询示例:
SELECT MAX(last_modification) AS last_modification FROM data_table
答案 4 :(得分:0)
您可以使用缓存系统来存储数据。
在每次修改对象时,如果可能使用它,可以从缓存中删除它或刷新其缓存版本。
有许多方法可以在PHP中实现缓存,其中包括Memcached。