我们目前使用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作为密钥散列吗?是否增加了与按键的潜在冲突?
发布于 2013-03-11 20:09:29
请阅读http://bretm.home.comcast.net/~bretm/hash/8.html (TL;DR:"CRC32从来没有打算用于哈希表。真的没有充分的理由将其用于此目的,我建议您避免这样做“)。
您是否有那么多的独特查询需要切换到MD5之外的其他查询?如果是这样,可以考虑使用比CRC32更合适的工具,比如MurmurHash或CityHash。
https://stackoverflow.com/questions/15337790
复制相似问题