1

我们目前使用 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 替换为密钥哈希的足够好的解决方案吗?与键的潜在碰撞是否增加?

4

1 回答 1

1

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

您是否有那么多独特的查询需要切换到 MD5 之外的其他查询?如果是这样,请考虑除 CRC32 之外更合适的东西,例如MurmurHashCityHash

于 2013-03-11T12:09:29.150 回答