使用crc32 over md5进行散列memcached密钥

时间:2013-03-11 11:47:12

标签: php hash memcached md5 crc32

我们目前使用MD5来散列我们想要在memcached中查找的密钥。

一个基本的例子是:

$sql = "SELECT * FROM articles WHERE id = 1";
$key = md5($sql);

if (!$results = $memcache->get($key)) {
    $results = $db->query($sql);
    $memcache->set($key, $results);
}

密钥大小全是32个字节,因为它使用MD5来散列密钥。

我们正在考虑使用crc32代替散列密钥以节省内存,例如:

$key = hash('crc32', $sql);

这将生成一个只有8个字节的密钥。

这是否足以将MD5替换为密钥哈希?是否有与钥匙发生潜在碰撞的增加?

1 个答案:

答案 0 :(得分:1)

阅读http://bretm.home.comcast.net/~bretm/hash/8.html(TL; DR:“CRC32从未打算用于哈希表。实际上没有充分理由将其用于此目的,我建议您不要这样做”)。

除了MD5之外,您是否还有许多独特的查询可以转换为其他内容?如果是这样,请考虑除CRC32之外更合适的内容,例如MurmurHashCityHash