我在我的WWW框架中使用了大量API调用的缓存和缓冲技术,其中一个常用的技巧是“指纹识别”,用于匹配缓存文件名以及检测已经执行过的API调用。
很多数据都是以数组的形式传递,例如GET、POST等等。因此API调用的唯一性取决于这些数据。
于是我需要对这些信息进行指纹识别。为了实现这个目的,需要从数据数组生成一个“指纹”,并将其散列成一个字符串,以便存储和比较。
在PHP中可以使用serialize()和json_encode()对数组进行序列化。在各种基准测试之后,我认为json_encode()是更快的方法,而且我对它非常满意。
关于哈希算法,可以使用md5()和sha1()函数,其中md5()在我的基准测试中速度更快。
因此,我的当前指纹算法如下:
很多数据都是以数组的形式传递,例如GET、POST等等。因此API调用的唯一性取决于这些数据。
于是我需要对这些信息进行指纹识别。为了实现这个目的,需要从数据数组生成一个“指纹”,并将其散列成一个字符串,以便存储和比较。
在PHP中可以使用serialize()和json_encode()对数组进行序列化。在各种基准测试之后,我认为json_encode()是更快的方法,而且我对它非常满意。
关于哈希算法,可以使用md5()和sha1()函数,其中md5()在我的基准测试中速度更快。
因此,我的当前指纹算法如下:
$fingerprint=md5(json_encode($array));
但是我对于这是否是在PHP中指纹识别的“最快可能”方法持怀疑态度。我已经尝试了谷歌和StackOverflow,并没有找到更好的替代方法。我是否走在正确的道路上,还是需要做些不同的事情呢?
md5(var_export($data, true))
有什么比较吗?另外,想知道是否可以依赖于json_encode
保留顺序。如果键的顺序不同,错过缓存将是很糟糕的事情。 - Hamish