我根据原始文件名及其版本的摘要存储文件的多个版本,如下所示:
$filename = sha1($original . ':' . $version);
是否值得将摘要($filename)缓存在 memcache 中作为键/值对(键是原始 + 版本并为 sha1 哈希值赋值),或者生成摘要足够快(对于高流量 php web应用程序)?
谢谢,
乔纳森
你最好不要缓存哈希。在我的笔记本电脑上计算 100,000 个短文件名哈希大约需要 1/2 秒(相当快的 Core 2 Duo):
byte[][] fileNames = Enumerable.Range(0, 100).Select(i => new UnicodeEncoding().GetBytes(System.IO.Path.GetRandomFileName())).ToArray();
Stopwatch stopWatch = new Stopwatch();
using (SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider())
{
stopWatch.Start();
for (int j = 0; j < 1000; j++)
{
for (int i = 0; i < 100; i++)
{
sha1.ComputeHash(fileNames[i]);
}
}
stopWatch.Stop();
Console.WriteLine("Total: {0}", stopWatch.Elapsed);
Console.WriteLine("Time per hash: {0}", new TimeSpan(stopWatch.ElapsedTicks / 100000));
}
总计:00:00:00.5186110 每个哈希的时间:00:00:00.0000014
哈希非常快,尤其是对于小的输入(例如文件的名称和版本)。
现在,如果您对文件本身进行哈希处理,并且它们非常大,那将是另一回事(仅仅是因为从磁盘读取整个文件需要很长时间)