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

时间:2012-01-25 06:21:52

标签: php

我们还有很多客户网站仍在GoDaddy,它们是复杂的网站,因此我们需要一些时间来迁移它们。最终,他们最终将进入一个专门的环境,但就目前而言,我们仍然坚持使用GoDaddy的共享托管方案。

我想在静态文件中设置输出缓冲区PHP缓存,并且可能每3-4小时清除一次。我在网上看到的用于完成此操作的内容似乎将所有缓存文件放入一个大目录中。

GoDaddy有一个策略(我们现在在另一个问题上正在努力),他们在一个目录中不允许超过1,024个文件,因为它会降低共享环境的性能。我不反对这个事实,但我希望有一个聪明的PHP缓存解决方案,我们有一个嵌套的缓存结构。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

您可以做的是对目录进行哈希以创建子目录结构。很多事情将取决于你当然是如何存储/命名你正在缓存的文件,所以这只是一种通用方法。

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

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

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

要做的另一件事当然是确保您的数据库尽可能优化,以便您知道实际上需要来缓存内容。缓存很好,但是一旦你从db中压缩了所有内容(索引,优化查询),它就应该完成。

还有像memcached这样的服务器,但是在共享主机上,我假设你无法使用。