我们目前使用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作为密钥哈希吗?与钥匙碰撞的可能性增加了吗?
Read http://bretm.home.comcast.net/~bretm/hash/8.html (TL;DR: "CRC32从未打算用于哈希表。确实没有很好的理由将其用于此目的,我建议您避免这样做")。
你是否有那么多独特的查询,它保证切换到MD5以外的其他东西?如果是这样,考虑一些比CRC32更合适的东西,比如MurmurHash或CityHash。