PHP实现一致性哈希算法

我是借助一个三方库实现的 有时间再详细挖一挖这个库的源码

composer require flexihash/flexihash

$hash = new Flexihash();

// 添加节点
add$hash->addTargets(['cache-1', 'cache-2', 'cache-3']);

// 装填数据
$hash->lookup('object-a');

// 修改节点
$hash->addTarget('cache-4')
  ->removeTarget('cache-1');

// 获取节点数据
$hash->getAll();

// 获取数据节点
$hash->lookupList('object', 1);

array(2) {
  ["targers"]=>
  array(10) {
    [159095616]=>
    string(17) "192.168.1.1:11011"
    [2122099670]=>
    string(17) "192.168.1.1:11011"
    [576112771]=>
    string(17) "192.168.1.1:11012"
    [1431435285]=>
    string(17) "192.168.1.1:11012"
    [994965954]=>
    string(17) "192.168.1.1:11013"
    [1279969620]=>
    string(17) "192.168.1.1:11013"
    [1946971909]=>
    string(17) "192.168.1.1:11014"
    [51077011]=>
    string(17) "192.168.1.1:11014"
    [1830248004]=>
    string(17) "192.168.1.1:11015"
    [437284562]=>
    string(17) "192.168.1.1:11015"
  }
  ["positions"]=>
  array(5) {
    ["192.168.1.1:11011"]=>
    array(2) {
      [0]=>
      int(159095616)
      [1]=>
      int(2122099670)
    }
    ["192.168.1.1:11012"]=>
    array(2) {
      [0]=>
      int(576112771)
      [1]=>
      int(1431435285)
    }
    ["192.168.1.1:11013"]=>
    array(2) {
      [0]=>
      int(994965954)
      [1]=>
      int(1279969620)
    }
    ["192.168.1.1:11014"]=>
    array(2) {
      [0]=>
      int(1946971909)
      [1]=>
      int(51077011)
    }
    ["192.168.1.1:11015"]=>
    array(2) {
      [0]=>
      int(1830248004)
      [1]=>
      int(437284562)
    }
  }
}

可以将 targers 排好序缓存进 apcu 中,使用二分查找快速获取数据的节点信息。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇