首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >会话变量对多个数据库查询的最佳实践

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

Stack Overflow用户
提问于 2012-01-22 02:00:28
回答 2查看 699关注 0票数 0

我有一个页面,拉2-3块数据从sql。这些块被分解成大约20个不同的变量。

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

问题:

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

其中一些页面修改了数据库,随后修改了变量。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-22 02:10:33

是的,如果有一个缓存机制就好了。但是,php的会话变量不是最好的解决方案。您可以使用诸如APC或MemCached之类的缓存系统,也可以简单地将它们存储到硬盘上的文件中。

不使用会话变量的原因:

  1. 作用域。我敢打赌,你的一些变量可能比会话的作用域更广。换句话说,一些变量可以在不同的sessions.
  2. Eager加载之间共享。每次调用session_start,变量都将被反序列化并加载,无论您是否需要它们。
票数 2
EN

Stack Overflow用户

发布于 2012-01-22 02:14:50

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

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

代码语言:javascript
复制
if( rand(0,100) < 10){
   readSessionsFromPost();
}

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

代码语言:javascript
复制
$time = $db->fetch_one( 'SELECT MAX(mtime) FROM pages');
strtotime( $time) >= $_SESSION['time'];

要而论之。

如果您不关心用户在20个请求之后获得当前数据,那么您应该使用rand (实际上我关心的是,并且永远不会使用this :)。

如果您有权配置文件访问,则应使用mtime和modified time (不需要请求数据库)。

如果你只有很少的用户,并且有很好的服务器性能储备,你应该每次都加载它们(或者当数据每隔几秒钟发生变化时)。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8955275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档