php哈希分表過程中出現(xiàn)大整型數(shù)據(jù)溢出問題的解決

背景:
python腳本監(jiān)控?cái)?shù)據(jù)進(jìn)行哈希分表,方案如下:

    ```
        def gethashcode(str):
              import hashlib
              m = hashlib.md5()
              m.update(str)
              hashcode = m.hexdigest()
              return int(hashcode, 16)
    ```

如上腳本哈希分表,key落入哪個(gè)分表,獲取的時(shí)候就從哪個(gè)分表取出。后臺(tái)PHP在實(shí)現(xiàn)匹配分表時(shí)要翻譯實(shí)現(xiàn)python的哈希分表方案唠倦。最初方案如下:

      ```
        function gethashcode($k)
        {
            $hashcode = md5($k);//獲取32為16進(jìn)制字符串
            return hexdec($hashcode);//將16進(jìn)制字符串轉(zhuǎn)為十進(jìn)制數(shù)字
         }

      ```

如上PHP實(shí)現(xiàn)內(nèi)容會(huì)出現(xiàn)PHP大整型數(shù)據(jù)溢出問題,最后對(duì)table_nums進(jìn)行取模的時(shí)候會(huì)發(fā)生異常涮较。改良原理如下:

      ```
      如果用一個(gè)int 型數(shù)據(jù)保存. 逐步解釋每一個(gè)字符乘以16^n的值再累加, 把字符串轉(zhuǎn)化成數(shù)字 再 mod 10的話稠鼻,會(huì)存在溢出的      問題, 所以這種思路不太好.
      自己能想到最好的辦法是這樣的:讀出每一個(gè)字符對(duì)應(yīng)的于0~15的值(除最后一位)累加乘以6,再加上最后一位的值. 之后再 mod10 即是最終所求的余數(shù)..
      原理:16^n = 10*k +6 (n,k為正整數(shù),且n>=1) 這個(gè)式中顯然成立.. 因此 (16^n)mod(10) = (10*k + 6)mod(10) = 6(n,k為正整數(shù),且n>=1).
       因此除最后一位的數(shù).都可以直接簡(jiǎn)化為乘以6狂票,再加了最后一位的值. 最后mod 10即可.
       示例: 比如 0x58fd7 mod 10 = ?
       直接口算易知:(5 + 8 + 15 + 13)* 6 + 7 的結(jié)果mod10 為 3 候齿。。 有此方法上面的式中很長(zhǎng)都可以很快口算出來.何況用編程for循環(huán)呢..

      ```

以上原理參考文章:https://blog.csdn.net/w_sx12553/article/details/17526917
原理對(duì)應(yīng)方案:

      ```
       function gethashcode($k)
        {
              $m16 = md5($k);
              $m10 = 0;
              for ($i=0; $i < strlen($m16); $i++) { 
                    if($i == strlen($m16)-1) break;
                    $m10 += hexdec($m16[$i]);
               }
               $m10 = $m10*6+hexdec($m16[$i]);
               return $m10;
      }

      

      $mod = $m10%table_nums;
      ```

over~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末慌盯,一起剝皮案震驚了整個(gè)濱河市周霉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌亚皂,老刑警劉巖俱箱,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異灭必,居然都是意外死亡匠楚,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門厂财,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人峡懈,你說我怎么就攤上這事璃饱。” “怎么了肪康?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵荚恶,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我磷支,道長(zhǎng)谒撼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任雾狈,我火速辦了婚禮廓潜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘善榛。我一直安慰自己辩蛋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布移盆。 她就那樣靜靜地躺著悼院,像睡著了一般。 火紅的嫁衣襯著肌膚如雪咒循。 梳的紋絲不亂的頭發(fā)上据途,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音叙甸,去河邊找鬼颖医。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蚁署,可吹牛的內(nèi)容都是我干的便脊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼哪痰!你這毒婦竟也來了遂赠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤晌杰,失蹤者是張志新(化名)和其女友劉穎跷睦,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肋演,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡抑诸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了爹殊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蜕乡。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖梗夸,靈堂內(nèi)的尸體忽然破棺而出层玲,到底是詐尸還是另有隱情,我是刑警寧澤反症,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布辛块,位于F島的核電站,受9級(jí)特大地震影響铅碍,放射性物質(zhì)發(fā)生泄漏润绵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一胞谈、第九天 我趴在偏房一處隱蔽的房頂上張望尘盼。 院中可真熱鬧,春花似錦烦绳、人聲如沸悔叽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)娇澎。三九已至,卻和暖如春睹晒,著一層夾襖步出監(jiān)牢的瞬間趟庄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工伪很, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留戚啥,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓锉试,卻偏偏與公主長(zhǎng)得像猫十,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,077評(píng)論 25 707
  • 2016年有機(jī)茶生產(chǎn)貿(mào)易合作會(huì)議乏苦,通過會(huì)議學(xué)習(xí)和交流,獲得很多的信息尤筐,如認(rèn)證認(rèn)可的常態(tài)化汇荐,作為生態(tài)文明的建...
    朱進(jìn)偉西農(nóng)閱讀 305評(píng)論 0 0
  • 崽崽: 你不是一直想再長(zhǎng)高一點(diǎn)嗎? 昨晚媽媽去小語(yǔ)家坐了會(huì)兒盆繁。 小語(yǔ)爸爸建議我們每晚做10-20次拉伸掀淘, 然后睡前...
    liqi_carol閱讀 216評(píng)論 0 0
  • 關(guān)鍵詞:打破、挑戰(zhàn)油昂、禁錮 好吧繁疤,難道今天就要調(diào)任嗎? 可能是逆位的關(guān)系秕狰,相安無事一整天,就是人特別累躁染,早早的就睡了...
    瀚文ILoveU閱讀 207評(píng)論 4 0
  • 自然醒啦鸣哀。 中午美美噠睡了一覺。 下午吵架了吞彤,但保持自己了我衬。不勉強(qiáng)自己。 晚上醬油飯很好吃饰恕。 聽了一首歌《不想和你...
    逆風(fēng)追夢(mèng)人閱讀 120評(píng)論 0 0