1

我根据原始文件名及其版本的摘要存储文件的多个版本,如下所示:

$filename = sha1($original . ':' . $version);

是否值得将摘要($filename)缓存在 memcache 中作为键/值对(键是原始 + 版本并为 sha1 哈希值赋值),或者生成摘要足够快(对于高流量 php web应用程序)?

谢谢,

乔纳森

4

2 回答 2

2

你最好不要缓存哈希。在我的笔记本电脑上计算 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

于 2010-03-31T04:50:28.250 回答
0

哈希非常快,尤其是对于小的输入(例如文件的名称和版本)。

现在,如果您对文件本身进行哈希处理,并且它们非常大,那将是另一回事(仅仅是因为从磁盘读取整个文件需要很长时间)

于 2010-03-31T03:45:56.800 回答