首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于路径缓存的快速、无冲突散列算法?

问用于路径缓存的快速、无冲突散列算法?
EN

Stack Overflow用户
提问于 2011-09-07 21:17:10
回答 4查看 1.6K关注 0票数 2

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

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

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

显然,这句话是php可以使用的所有散列函数的列表。

编辑在我的评论中没有引起太多的注意,但是当我使用路径的普通字符串作为缓存数组的索引时,它没有工作。当我将它更改为md5散列时,它就起作用了。如果我有更多的时间,我会解决这个问题,但这是一个一次性的项目,我不能花更多的时间,我绝对必须这样做。

Post编辑好吧,显然我在缓存方面做错了什么;当我将索引更改为散列时,我一定改变了什么,这使得缓存开始工作,而不管是什么哈希。人们说我的散列应该可以处理文件路径字符串,而且md5s不会花那么长时间。所以,我不知道我做错了什么,我也没有时间在这个项目中找到答案。我会删除这个问题,但它已经有答案了。

EN

回答 4

Stack Overflow用户

发布于 2011-09-07 21:20:07

如果这些散列仅在PHP中使用,并且是在脚本工作时动态构建的,那么为什么不简单地使用一个数组呢?

代码语言:javascript
复制
if (isset($path_cache['/some/weird/ugly/long/path'])) { 
   ...
}

在没有MD5计算开销的情况下也会工作得很好。

票数 5
EN

Stack Overflow用户

发布于 2011-09-07 21:24:10

我建议你在这件事上使用简单的路径--不需要把它打乱。然而,crc32似乎是一个快速的。记住-你牺牲了碰撞速度来加快速度。

票数 1
EN

Stack Overflow用户

发布于 2014-05-10 09:21:28

代码语言:javascript
复制
foreach (hash_algos() as $value) {
    print hash($value, 'some random') . ' - ' . $value . '<br />';
}

它将在php支持的所有散列算法中打印字符串哈希。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7340615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档