缓存和会话变量(PHP,MySQL ......)

时间:2013-11-01 14:52:12

标签: php mysql session caching

为这篇冗长的帖子提前道歉,只是试图清楚地解释这种情况。

我创建了一个PHP驱动的网站,用于搜索大量(数百万条记录)的MySQL数据库。在搜索页面上,您有通常的搜索条件表单。由于人们经常使用网站的方式,搜索条件被保存到会话变量中,因此如果重新加载搜索页面,则先前的条件保留在表单字段中(当然,还有一个手动重置条件的按钮)。这本身就可以了。

我还有两个语言选择链接,用于将语言选择存储在会话变量中(使页眉加载适当的本地化文件),如上所述,这本身也可以正常工作。

有问题的是,当用户获得搜索结果,人员列表,并希望打开一个人的详细信息(从search.php转到info.php),然后又想回到通过后退按钮列出的人员,在页面重新发送MySQL查询等时重新加载上一页需要很长时间,而不是返回到缓存页面。有时甚至可能需要5秒或更长时间,因为查询产生多达5000个结果 - 但即使是200-500结果也需要很长时间才能重新加载,因为数据库本身很大而且不是世界上最快的。限制结果的数量并不实际。

乍一看显而易见的解决方案是SEEM将启用浏览器缓存。这正是我通过PHP头和pragma控件所做的。一切似乎都很好,因为回到列表基本上是瞬间完成的。但是,我意识到启用缓存意味着更新的会话变量不起作用。在访问不同页面后重新加载搜索页面时,新搜索条件无法正确替换旧搜索条件,即使您选择其他语言,页面也会以您之前使用的语言打开,因为这是他们缓存的方式!您可以通过F5强制语言更新,但这似乎不太有助于搜索条件。但即便如此,F5垃圾邮件也不是真正的答案,它需要自动运行。

长话短说,如何在不使会话变量无效的情况下快速打开搜索结果列表?或者,当使用后退按钮时,我是否只需要处理缓慢的页面加载,从而使用户烦恼?我真的不想在新页面中打开info.php。

1 个答案:

答案 0 :(得分:0)

您是否考虑过在文件系统上缓存数据库结果?我发现Zend Framework缓存类非常容易使用。您可以使用所需的任何信息来区分缓存结果与其他缓存结果。因此,缓存可以根据需要进行细化。

http://framework.zend.com/manual/1.12/en/zend.cache.introduction.html

您不需要使用整个Zend Framework来使用该类。您可以单独使用它。