Php 使用crc32 over 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散列

目前,我们使用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(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好。