繁体   English   中英

使用“主会话”进行站点范围的缓存

[英]Using 'master session' for site-wide cache

我一直想向网站添加一个缓存功能,该功能在多个用户会话之间保持不变。 这个想法是为了能够存储频繁执行的查询或不经常更改的计算的结果。 我主要的用途是当用户访问我的网站时,会运行查询来查找他们请求的页面。 页面很少更改,因此我想为每个用户将该结果缓存2-4个小时,这样查询就不必为每个用户的每次页面加载都一遍又一遍地运行。

我所做的是一个存储当前session_id的PHP对象,每当对缓存对象进行读取或写入操作时,它将使用session_write_close()关闭该会话,并使用一个硬编码的session_id启动一个新的会话,以读取/写入此硬编码的“主”会话,然后在对主会话进行session_write_close()之后恢复为原始session_id。

有人能想到这种方法有什么问题吗? 我想避免使用任何过于复杂的功能(例如memecache),所以我认为这很简单,而且看起来还不错!

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

与仅使用Memcache相比,此解决方案听起来更复杂。

此解决方案的主要问题是您正在使用Session来基本上存储缓存文件。 默认情况下,PHP将会话存储在文件中,您无需关闭和打开会话。 这是一种更简单的方法,可让您以更好的性能完成任务:

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

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

     file_put_contents($cache_file, serialize($cache_object)) 
  3. 如果文件太小,则需要2个小时,然后使用file_get_contents()unserialize()检索PHP Cache对象

     $cache_object = unserialize(file_get_contents($cache_file)) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM