鍍金池/ 問(wèn)答/PHP/ crc32取模映射到一臺(tái)機(jī)器上,怎么做才能讓一個(gè)key加上一些因子分散到機(jī)器呢

crc32取模映射到一臺(tái)機(jī)器上,怎么做才能讓一個(gè)key加上一些因子分散到機(jī)器呢

如題,crc32取模映射到某一臺(tái)機(jī)器
比如,我一個(gè)key按照一個(gè)ID生成,類似key_1000, 我想把這個(gè)key加上一些東西,在每臺(tái)機(jī)器都寫(xiě)上這個(gè)key有什么方法嗎, 前提不想更改底層按照 crc32這個(gè)取模
假如有三臺(tái)機(jī)器, 我想 key_1000_0, key_1000_1, key_1000_2 這樣三個(gè)key,經(jīng)常測(cè)試,有些情況不會(huì)三臺(tái)機(jī)器都有, 可能 key_1000_0, key_1000_1 這兩個(gè)在 A 機(jī)器, B機(jī)器 key_1000_2, C 機(jī)器沒(méi)有這個(gè)key

回答
編輯回答
不討囍

沒(méi)有通用的“因子”,對(duì)不同的key,你要加不同的幾個(gè)“因子”。

如果只是想剛好覆蓋全部機(jī)器,可以循環(huán)計(jì)算crc32取模。

<?php

function gen_key($key, $mod)
{

    $result = [];
    $i = 0;
    while (count($result) < $mod) {
        $new_key = $key . '_' . $i;
        $k = crc32($new_key) % $mod;
        $i = $i + 1;
        if (!isset($result[$k])) {
            $result[$k] = $new_key;
        }
    }
    return $result;
}

輸出例子:https://3v4l.org/VjLpr

2018年7月13日 02:56