我正在寻找缓存数千个网页的最佳解决方案。现在我正在使用平面文件,在有数千个平面文件之前效果很好,然后在访问文件缓存时整个文件系统会变慢(很多)(在 OpenVZ 下使用 EXT3 在 CentOS 上运行)。我想探索其他选项,例如 Redis 或 MongoDB,但它们会更快吗?如果没有,最好的建议是什么?
我的系统会为每个网站动态创建超过 40K 的页面,因此做内存缓存也不可行。
谢谢!!
文件缓存很好,你只需要聪明一点。我的目标是将目录保持在 500 个或更少的条目。有 40k 个条目,只需对 url 进行哈希处理并使用哈希的前 2 个字节,就可以得到 255 个文件夹,每个文件夹平均应包含约 150 个文件。
好吧,我知道 StackExchange 在 CentOS 上使用 Redis,所以从 LAMP 堆栈中它应该会更好。Redis 似乎针对这类事情进行了优化,而 MongoDB 更像是一个实际的数据库。您也可以使用 memcached。
我建议将文件分散在子目录中,可能按缓存文件名称的 md5 散列的前两个或三个字符(或文件名的前两个或五个字符)分组。这减轻了文件系统的负担。
您是否考虑过使用 Varnish 之类的东西?根据您缓存的内容以及失效的复杂程度,它可能对您有用。您将动态创建页面并让代理层处理任何重复的请求。