我在我的WWW框架中使用了大量API調用的緩存和緩衝,並且我最終使用的所有東西之一是'指紋'數據以匹配緩存文件名以及檢測已經完成的API調用。用於指紋數組的最快方法(從數據數組中計算唯一散列)
很多數據在數組中移動,如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 2012-03-21 21:42:30
根據我的測試,var_export()比serialize()快,但比json_encode()慢。我正在研究crc32()來替換md5(),需要測試。 – kingmaple 2012-03-21 21:46:25
好吧,顯然(令我驚訝)crc32()實際上比md5()慢,當然更容易發生碰撞。所以我回到以前我在md5(json_encode($ array)); – kingmaple 2012-03-21 23:38:12