会话变量是多个数据库查询的最佳实践

时间:2012-01-21 18:00:28

标签: php mysql

我有一个页面可以从sql中提取2-3个数据块。 这些块被分成大约20个不同的变量。

您导航到的每个页面都会反复使用相同的数据。

问题:

我应该将所有变量放在会话变量中,还是应该在每个页面上查询数据库,每次都重新建立数据和变量。

某些页面会修改数据库,然后修改变量。

感谢。

2 个答案:

答案 0 :(得分:2)

是的,拥有一个缓存机制会很好。但是,php的会话变量不是最佳解决方案。您可以使用缓存系统(如APC或MemCached),也可以将它们存储在硬盘上的文件中。

不使用会话变量的原因:

  1. 范围。我敢打赌,你的一些变量可能比会话更广泛。换句话说,一些变量可以在不同的会话之间共享。

  2. 急切加载。每当您致电session_start所有时,无论您是否需要,变量都会被反序列化并加载。

答案 1 :(得分:1)

您应该尽可能地将数据存储在$_SESSION中(假设数据量不大并且总是反复使用)。

您遇到的最大问题是数据发生变化时会发生什么。您可以使用以下代码不时刷新它们:

if( rand(0,100) < 10){
   readSessionsFromPost();
}

另一种方法是修改本地文件并通过mtime在每个请求中进行检查(并在$_SESSION中存储最后一个值)。或者您可以使用:

$time = $db->fetch_one( 'SELECT MAX(mtime) FROM pages');
strtotime( $time) >= $_SESSION['time'];

总结一下。

如果您不关心用户以后获取当前数据20请求,您应该使用rand(我实际上会关心并且永远不会使用此:) :)。

如果您有权配置文件访问权限,则应使用mtime和修改时间(无需数据库请求)。

如果您只有少量用户并且在服务器性能方面有很大的保留,那么您每次都应该加载它们(或者每隔几秒就会更改数据)。

缓存会增加一些开销,您必须决定缓存这些数据是否对性能至关重要。

相关问题