是否有可能在页面加载时查询数据库一次PHP中。以某种方式存储这些结果并在随后的报告中显示给用户。是否有任何方法可以确定数据库中是否发生了某些变化,以便我们只能连接到数据库才能获取新的/更改的结果?缓存mysql的结果和查询只有当有变化
请给我一些想法。 谢谢。
是否有可能在页面加载时查询数据库一次PHP中。以某种方式存储这些结果并在随后的报告中显示给用户。是否有任何方法可以确定数据库中是否发生了某些变化,以便我们只能连接到数据库才能获取新的/更改的结果?缓存mysql的结果和查询只有当有变化
请给我一些想法。 谢谢。
检出MySQL查询缓存。
当没有需要更改时,MySQL将简单地返回存储在内存中的相同结果集。
http://dev.mysql.com/tech-resources/articles/mysql-query-cache.html
打我到它... –
你可以在你的数据表,它表明,例如,最后一条记录的修改时间使用其他领域。然后,您可以使用memcache(或另一个缓存子系统)并将其保存到最后修改时间戳中的数据库结果中。
在唯一的一个数据库查询中,您可以选择此字段(在select语句中使用带有描述字段的轻型SQL查询),并将其与从DB值中提取的值进行比较。如果它们不同,你就知道从复杂查询中获取数据库中的新数据。
“光” 的SQL查询的示例:
SELECT MAX(last_modification) AS last_modification FROM data_table
高速缓存,如APC,分布式缓存或XCache将通常具有寿命它变得过时之前。只要缓存不陈旧,就不会有任何对数据库的调用。请注意,否调用优于数据库的缓存记录集,因为没有调用保存整个往返。
如果您的应用程序是数据库的唯一写入源,那么只要有人向数据库写入数据,您就可以手动强制高速缓存在其设置生命周期之前过期。随后的查询会在查询运行时重新缓存。
如果有其他来源,例如远程服务器,您必须在数据库内实施触发器,以通知所有使用数据库更改的应用程序。消息队列最适合用于此目的。
您可以使用缓存系统来存储数据。
对于每个对象修改,您可以从缓存中删除它,或者在可能使用缓存版本的情况下刷新它的缓存版本。
在PHP中实现缓存的方法很多,其中包括Memcached。
有一个功能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/
您正在使用什么缓存? –
我没有使用任何。在我看来'缓存'是商店 – JPro