我有一个 Web 服务器,它保存缓存文件并将它们保存 7 天。文件名是 md5 哈希,即正好 32 个十六进制字符长,并保存在一个看起来像这样的树结构中:
00/
00/
00000ae9355e59a3d8a314a5470753d8
.
.
00/
01/
你明白了。
我的问题是删除旧文件需要很长时间。我有一个每天运行的 cron 作业
find cache/ -mtime +7 -type f -delete
这需要半天多的时间才能完成。我担心可扩展性以及这对服务器性能的影响。此外,缓存目录现在是我系统中的一个黑洞,偶尔会捕获无辜的du
或find
.
LRU 缓存的标准解决方案是某种堆。有没有办法将其扩展到文件系统级别?有没有其他方法可以更容易管理?
以下是我考虑过的想法:
- 创建 7 个顶级目录,每个工作日一个,每天清空一个目录。这将缓存文件的查找时间增加了 7 倍,使得文件被覆盖时变得非常复杂,而且我不确定它会对删除时间有什么影响。
- 将文件保存为带有名称和日期索引的 MySQL 表中的 blob。这看起来很有希望,但实际上它总是比 FS 慢得多。也许我做得不对。
有任何想法吗?