Php 使用';硕士班';用于站点范围的缓存

Php 使用';硕士班';用于站点范围的缓存,php,session,caching,Php,Session,Caching,我一直想给我的网站添加一个缓存功能,它可以在多个用户会话之间持久存在。其思想是能够存储频繁执行的查询或计算的结果,这些查询或计算也不会经常更改。我的主要用途是当用户访问我的网站时,会运行一个查询来查找他们请求的页面。页面很少改变,所以我想为每个用户缓存这个结果2-4个小时,这样查询就不必在每个用户的每个页面负载上反复运行 我所做的是一个PHP对象,它存储当前会话id,每当对缓存对象进行读写操作时,它都会用session\u write\u close()关闭会话,用硬编码会话id启动一个新会话,

我一直想给我的网站添加一个缓存功能,它可以在多个用户会话之间持久存在。其思想是能够存储频繁执行的查询或计算的结果,这些查询或计算也不会经常更改。我的主要用途是当用户访问我的网站时,会运行一个查询来查找他们请求的页面。页面很少改变,所以我想为每个用户缓存这个结果2-4个小时,这样查询就不必在每个用户的每个页面负载上反复运行

我所做的是一个PHP对象,它存储当前会话id,每当对缓存对象进行读写操作时,它都会用session\u write\u close()关闭会话,用硬编码会话id启动一个新会话,读/写这个硬编码的“主”会话,然后在主会话的会话写入关闭()后恢复到原始会话id

有人能想到这种方法有什么问题吗?我想避免使用任何像memecache这样过于复杂的东西,所以我觉得这很简单,而且似乎效果很好


如有任何想法或其他方法,将不胜感激

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

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

  • 使用以下方法检查缓存文件是否早于2小时:

  • 如果较早,请创建PHP缓存对象,并使用和将其写入缓存文件:

  • 如果文件小于2小时,则使用和检索PHP缓存对象


  • Dan这个问题对这个网站来说有点宽泛。很公平,我通读了指南,认为它仍然适用,但是第一篇文章,所以要生活和学习!我很高兴在这里找到了这个。这似乎是在会话之间共享实际PHP对象的唯一可能。我尝试了memcache,但我需要一种可能来迭代缓存的键/值。这种方法应该是可行的。我喜欢这种方法,目前正在尝试。然而,我认为file\u put\u contents的参数应该是正确的,反之亦然:
    file\u put\u contents($cache\u file,serialize($cache\u object))
    (根据)实际上,切换的参数现在已经修复。
    if(filemtime($cache_file) > time()-3600*2)
    
    file_put_contents($cache_file, serialize($cache_object))
    
    $cache_object = unserialize(file_get_contents($cache_file))