自定义PHP缓存

时间:2011-02-28 13:42:57

标签: php caching filesystems

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

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

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

我也在想,可能有一种方法可以智能地检查或标记要清理的某些文件,而无需单独检查所有现有文件。我正在考虑可能存储他们上次访问的时间戳或其他东西,但除了时间之外可能还有其他标准可能使缓存的数据过时,例如在应用程序中触发异常(尽管我可以说,无论何时发生整个缓存,会话将被清空或类似的东西)。

非常感谢有关这些问题的任何建议!

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

Windows和Unix都安排了工作支持 - 用于Unix / Linux的cron和用于Windows的'at'。将PHP脚本扫描到您的缓存目录并将删除条件应用于它找到的内容将是一件简单的事情。上次访问时间戳是微不足道的,基于缓存的文件内容或其他触发器略低于此。