使用'主会话'用于站点范围的缓存

时间:2014-08-19 11:30:59

标签: php session caching

我一直想在我的网站上添加一个缓存功能,该功能在多个用户会话之间持续存在。我们的想法是能够存储经常执行的查询的结果,或者经常不会发生变化的计算。我的主要用途是当用户点击我的网站时,会运行查询以查找他们请求的页面。页面不经常更改,因此我希望将此结果缓存2-4个小时以供用户使用,以便查询不必为每个用户的每个页面加载重复运行。

我所做的是一个存储当前session_id的PHP对象,每当对缓存对象进行读取或写入时,它都会使用session_write_close()关闭会话,启动带有硬编码的session_id读取的新会话/写入/来自这个硬编码的主人'会话,然后在session_write_close()主会话之后恢复到原始session_id。

有人能想到这种方法的任何问题吗?我想避免使用像memecache那样过于复杂的东西,所以我觉得这很简单,而且看起来工作得很好!

对方法的想法和其他想法将不胜感激!

1 个答案:

答案 0 :(得分:0)

这个解决方案听起来比使用Memcache更复杂。

我对此解决方案的主要问题是您使用Session来基本存储缓存文件。默认情况下,PHP将会话存储在文件中,您正在关闭并且不需要打开会话。这是一种更简单的方法,您可以通过更好的性能完成相同的工作:

  1. 使用filemtime()检查您的缓存文件是否超过2小时:

    if(filemtime($cache_file) > time()-3600*2)
    
  2. 如果较旧,则使用file_put_contents()serialize()创建PHP Cache对象并将其写入缓存文件:

    file_put_contents($cache_file, serialize($cache_object))
    
  3. 如果文件小于2小时,则使用file_get_contents()unserialize()

    检索PHP Cache对象
    $cache_object = unserialize(file_get_contents($cache_file))