php哈希分表过程中出现大整型数据溢出问题的解决

在使用Python脚本监控数据并基于哈希进行分表后,PHP在实现相同分表策略时遇到大整型数据溢出问题。原始PHP实现中,对table_nums取模操作导致异常。通过改良方案,参照https://blog.csdn.net/w_sx12553/article/details/17526917的文章原理,解决了PHP的大整型数据溢出问题。
摘要由CSDN通过智能技术生成

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的话,会存在溢出的      问题, 所以这种思路不太好.
      自己能想到最好的办法是这样的:读出每一个字符对应的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值