用于路径缓存的快速、无碰撞哈希算法?

use*_*841 2 php hash

我正在使用 php 转换网站。我的过程的一部分是验证图像路径没有指向不存在的图像(即没有损坏的图像)。由于许多页面共享某些图像,因此我设置了一个缓存数组以查看是否已检查给定路径的图像文件是否存在。

使用原始路径字符串作为数组索引不起作用,所以我使用了md5(),这就是诀窍。但是,转换脚本需要很长时间,而且很明显这是因为 md5 计算(过去几天我一直在频繁地运行转换,我立即注意到,一旦我的缓存开始工作,脚本运行时间要长得多。)

所以我想知道是否有一种更快的哈希算法可以在我的缓存中使用,当然我需要一个不会产生冲突的算法。由于这是一次性脚本,因此我不需要超级安全的牢不可破的算法,只需要一种可以更快地完成工作的算法。

此注释显然是 php 可用的所有散列函数的列表。

编辑我在评论中没有对此引起太多关注,但是当我使用路径的纯字符串作为缓存数组的索引时,它不起作用。一旦我将其更改为 md5 哈希,它就起作用了。如果我有更多时间,我会解决这个问题,但这是一个一次性项目,我不能花超过我绝对必须的时间。

发布编辑好的,显然我的缓存有问题;当我将索引更改为导致缓存开始工作的散列时,我一定改变了一些东西,而不管散列如何。人们说我的哈希应该可以处理文件路径字符串,而且 md5s 不会花费那么长时间。所以,我不知道我做错了什么,我没有时间在这个项目中弄清楚。我会删除这个问题,但它已经有了答案。

Mar*_*c B 5

如果这些哈希值仅在 PHP 内部使用,并且在脚本运行时动态构建,为什么不简单地使用数组呢?

if (isset($path_cache['/some/weird/ugly/long/path'])) { 
   ...
}
Run Code Online (Sandbox Code Playgroud)

在没有 MD5 计算开销的情况下也能正常工作。