php哈希分表过程中出现大整型数据溢出问题的解决
背景:
python脚本监控数据进行哈希分表,方案如下:
```
def gethashcode(str):
import hashlib
m = hashlib.md5()
m.update(str)
hashcode = m.hexdigest()
return int(hashcode, 16)
```
如上脚本哈希分表,key落入哪个分表,获取的时候就从哪个分表取出。后台PHP在实现匹配分表时要翻译实现python的哈希分表方案。最初方案如下:
```
function gethashcode($k)
{
$hashcode = md5($k);//获取32为16进制字符串
return hexdec($hashcode);//将16进制字符串转为十进制数字
}
```
如上PHP实现内容会出现PHP大整型数据溢出问题,最后对table_nums进行取模的时候会发生异常。改良原理如下:
```
如果用一个int 型数据保存. 逐步解释每一个字符乘以16^n的值再累加, 把字符串转化成数字 再 mod 10的话,会存在溢出的 问题, 所以这种思路不太好.
自己能想到最好的办法是这样的:读出每一个字符对应的