Php 使用crc32 over md5对memcached键进行散列
目前,我们使用MD5对要在memcached中查找的密钥进行散列 一个基本的例子是:Php 使用crc32 over md5对memcached键进行散列,php,hash,memcached,md5,crc32,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散列
$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(TL;DR:“CRC32从未打算用于哈希表。确实没有很好的理由将其用于此目的,我建议您避免这样做”)
您是否有那么多独特的查询需要切换到MD5之外的其他查询?如果是这样的话,除了CRC32,比如.O.P/>Read(TL;DR:CRC32从来没有打算用于哈希表使用。
您是否有那么多独特的查询需要切换到MD5之外的其他查询?如果是这样的话,除了CRC32,比如,或./P>,MurMuHASH似乎生成了类似于MD5的32字节密钥,这是正常的吗?MurMurHAS3(最新的)是32位和128位版本。您正在使用哪个实现?(你是如何使用它的?)在32位版本中,我安装了MurrueHash3 PHP扩展并运行了
echo MurrueHash3('test',4)代码>并生成一个32字节的字符串,这不是我的初衷,我正在寻找较短的键。这似乎效果更好,键基本上只是数字,对吗?在确保唯一性和碰撞安全方面,这比MD5好吗?钥匙只是数字,是的。如果愿意,您可以使用base\u convert($hashresult,10,36)
生成更小的键。不,它不比MD5好,也不比CRC32好。MurrueHash似乎在生成与MD5类似的32字节密钥。这正常吗?MurrueHash3(最新版本)有32位和128位版本。您正在使用哪个实现?(你是如何使用它的?)在32位版本中,我安装了MurrueHash3 PHP扩展并运行了echo MurrueHash3('test',4)代码>并生成一个32字节的字符串,这不是我的初衷,我正在寻找较短的键。这似乎效果更好,键基本上只是数字,对吗?在确保唯一性和碰撞安全方面,这比MD5好吗?钥匙只是数字,是的。如果愿意,您可以使用base\u convert($hashresult,10,36)
生成更小的键。不,它不比MD5好,它比CRC32好。