PHP缓存,将缓存存储在多个目录中


PHP Caching, Storing cache in multiple directories

GoDaddy仍有许多客户端站点,它们都是复杂的站点,因此我们需要一些时间来迁移它们。最终,他们将在一个专用的环境中结束,但目前,我们仍停留在GoDaddy的共享托管场景中。

我想在静态文件中设置输出缓冲区PHP缓存,并可能每3-4小时清除一次。我在网上看到的实现这一点的方法似乎是将所有缓存文件放入一个大目录中。

GoDaddy有一项政策(我们现在正在与另一个问题作斗争),他们不允许在一个目录中超过1024个文件,因为这会降低共享环境的性能。我并不否认这个事实,但我希望有一个聪明的PHP缓存解决方案,我们有一个嵌套的缓存结构。

有什么想法吗?

您可以做的是对目录进行散列以创建子目录结构。当然,这在很大程度上取决于您如何存储/命名正在缓存的文件,所以这只是一种通用方法。

例如,如果要缓存页面20150.php,请将文件存储为/cache/20/20150.php,将每个二级目录限制为1000个文件。如果您知道要加载20150.php,那么您就知道要使用数千位数字作为目录名。

这就是文档管理系统通常将大量图像和文档存储在文件系统中的方式。如果正在缓存的内容在数据库中具有关联的文章ID,则这是理想的选择。

另一种方法是创建页面的实际哈希(md5,或您选择的算法),并以此为基础构建结构,顶部目录是哈希的前3位,下面的目录是第二个3位。例如,文件c88ad6a7421ef2b0d7451c3390a00a39.php可能存储在/cache/c88/ad6/c88ad6a7421ef2b0d7451c3390a00a39.php中。

当然,要做的另一件事是确保你的数据库尽可能优化,这样你就知道你实际上需要来缓存内容。缓存是可以的,但应该在从数据库(索引、优化查询)中挤出所有内容后再进行缓存。

还有像memcached这样的服务器,但在共享主机上,我想这对你来说是不可用的。