自定义PHP缓存

自定义PHP缓存,php,caching,filesystems,Php,Caching,Filesystems,我有一个应用程序需要通过多个页面请求(对于同一用户/会话)缓存大量数据(有时甚至是MBs)。在做了一些谷歌搜索等之后,我得出结论,最好通过将缓存文件写入磁盘来实现缓存机制(如果您认为有更好的替代方案,请纠正我) 现在,我的想法是有一个根缓存文件夹,在其中我为每个会话ID创建文件夹,以不覆盖单独会话中使用的任何缓存数据。然后,对于每个数据块,我将创建一个唯一的标识符,每当我想再次检索它时,它都可以链接到数据。然后将数据序列化为字符串格式(使用默认的PHP“serialize”函数),然后将其写入相

我有一个应用程序需要通过多个页面请求(对于同一用户/会话)缓存大量数据(有时甚至是MBs)。在做了一些谷歌搜索等之后,我得出结论,最好通过将缓存文件写入磁盘来实现缓存机制(如果您认为有更好的替代方案,请纠正我)

现在,我的想法是有一个根缓存文件夹,在其中我为每个会话ID创建文件夹,以不覆盖单独会话中使用的任何缓存数据。然后,对于每个数据块,我将创建一个唯一的标识符,每当我想再次检索它时,它都可以链接到数据。然后将数据序列化为字符串格式(使用默认的PHP“serialize”函数),然后将其写入相应的文件

我不太确定如何实现的是清理缓存文件。在某些情况下,数据不再需要,例如会话已过期或其他一些原因。由于在每个页面请求期间检查这一点可能会有太多开销,因此我希望必须使用某种调度器在外部执行此操作。但是,我不能保证我的应用程序将在UNIX环境下运行,所以我也必须考虑其他平台(Windows,MAC)。有没有任何人都能想到的通用解决方案是跨平台的,而不会有太多麻烦

我还认为可能有一种方法可以智能地检查或标记某些要清理的文件,而不必单独检查所有现有文件。我在考虑可能存储他们最后访问的时间戳或其他东西,但除了时间之外,可能还有其他标准会使缓存的数据过时,例如在应用程序中触发异常(尽管我可以说,每当发生这种情况时,该会话的整个缓存都将被清空或诸如此类)


如果您对这些问题有任何建议,我们将不胜感激

如果安装了MemCache,可以将其用于缓存。文件缓存速度更快,并且您可以给它一个过期时间,因此它将在给定的时间段后自动从缓存中删除。

Windows和Unix都有计划的作业支持—cron用于Unix/Linux,at用于Windows。编写一个PHP脚本来扫描缓存目录,并将删除条件应用到它所发现的内容,这将是一件简单的事情。最后一次访问时间戳是微不足道的,基于缓存的文件内容或其他触发器的时间戳稍微少一些。

我考虑过这一点,但显然MemCache只允许存储多达1MB的数据(每个数据条目)…是的,这可能是个问题。也许其他缓存(比如APC)没有这个限制。但是如果您需要文件缓存,则需要一个计划的应用程序或cron作业来进行清理。这也可以是一个PHP文件,因此作业本身是跨平台的,并且只为特定平台创建调度。您可以节省一段时间来记住每个文件应该清理的时间,或者您可以在MemCache中放置一个具有相同名称的条目作为标志。每个没有MemCache条目的文件都可以被清理。当然,如果它在缓存文件夹中;-)但最好是尽量保持块的大小较小。我不知道这是否可行,但您可以编写一个“可缓存查询”对象来执行查询并将结果放入缓存。缓存id可以是查询的哈希。这样,您可以限制块的大小(只要单个查询返回的序列化数据不超过1MB),并且可以轻松地指定每个查询的生存时间。