繁体   English   中英

缓存目录的奇怪命名子目录的目的是什么

[英]What is the purpose of wierdly named subdirectories for cache directories

查看 Spotify 缓存的“Storage”目录时,我意识到有很多子目录,以 2 位十六进制名称命名。 它们中的每一个都包含一个或多个奇怪命名的文件。

过去我遇到过其他程序创建的类似目录结构,我一直想知道这种命名/存储方案的原因是什么。

那你为什么要做这样的事情? 这个概念有什么好处?

我希望你仍然对答案感兴趣。

通常您会缓存图像或内容等内容。 假设出于性能/稳定性原因,我们将来自不同 url 的图像缓存到我们的服务器。 你怎么命名那个图像? 您可以将其命名为 URL,但名称中不能包含斜杠或其他特殊字符,并且长度也有限制。

因此,您计算该 URL 的所谓 hash 并将其用作文件名。 哈希通常不是十六进制的,所以没有非法字符,它们的长度总是相同的。 如果您现在需要来自 URL 的图像,则计算其 hash 并检查是否在缓存中找到它。

您不将所有缓存文件存储在一个目录中的原因是大小限制。 您通常根据第一个字符将缓存文件分组到子目录中。 请参阅此答案: softwareengineering.stackexchange.com/a/301401

例如,假设我们要缓存https://example.com/favicon.ico 该 URL 的 MD5 哈希是f54403d0da4a57aa79bdf459897f08bd 您现在有三个不同的选择:

  • 如果缓存预计将保持较小的存储状态,例如/cache/f54403d0da4a57aa79bdf459897f08bd.ico (出于多种原因,您通常希望保留文件扩展名)。
  • 您可以使用四个中等缓存 /cache/f/f54403d0da4a57aa79bdf459897f08bd.ico or remove duplicate information by trimming the first character, as it already exists in the directory name like /cache/f/54403d0da4a57aa79bdf459897f08bd.ico
  • 对于非常大的缓存,您可以细分更多,例如 /cache/f/5/4403d0da4a57aa79bdf459897f08bd.ico`

这些只是几个例子,但基本原理保持不变。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM