缓存SHA1摘要结果?

时间:2010-03-31 03:11:16

标签: caching hash digest

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

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

将memcache中的摘要($ filename)作为键/值对(密钥是原始+版本并将sha1散列值)缓存,或者足够快地生成摘要(为高)是否值得交通php web app)?

谢谢,

乔纳森

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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