鍍金池/ 問答/PHP/ crc32取模映射到一臺機器上,怎么做才能讓一個key加上一些因子分散到機器呢

crc32取模映射到一臺機器上,怎么做才能讓一個key加上一些因子分散到機器呢

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

回答
編輯回答
不討囍

沒有通用的“因子”,對不同的key,你要加不同的幾個“因子”。

如果只是想剛好覆蓋全部機器,可以循環(huán)計算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