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


Caching and session variables (PHP, MySQL...)

提前为冗长的帖子道歉,只是想清楚地解释情况。

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

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

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

乍一看,显而易见的解决方案似乎是启用浏览器缓存。这正是我通过PHP标头和编译指示控件所做的。一切似乎都很好,因为回到名单基本上是瞬间的。但是,我意识到启用缓存意味着更新的会话变量不起作用。在转到其他页面后重新加载搜索页面时,新搜索条件不会正确替换旧搜索条件,即使您选择了另一种语言,页面也会以您之前使用的语言打开,因为这就是它们的缓存方式!您可以通过 F5 强制更新语言,但这似乎对搜索条件没有多大帮助。但即使有,F5垃圾邮件也不是真正的答案,它需要自动工作。

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

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

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

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