海运的博客

PHP一致性hash

发布时间:December 11, 2014 // 分类:PHP // No Comments

方法1,hash后取模:

<?php
function get_hash($str, $num=10){
  $crc = crc32($str);
  $nu = $crc % $num;
  return $nu;
} 

测试公平性:

<?php
function genstr($num) {
  return substr(str_shuffle('abcdefghijklmnupqrstuvwxyz'), 0, $num);
}

for ($i=1; $i<10000000; $i++) {
  $str = genstr(5);
  $crc = crc32($str);
  $nu = get_hash($str);;
  if (isset($count[$nu])) {
    $count[$nu]++;
  } else {
    $count[$nu]=1;
  }
}
print_r($count);

方法2,动态增添后最小影响之前的hash结果可使用consistent hashing:
https://github.com/RJ/ketama
https://github.com/pda/flexihash

标签:none

评论已关闭

分类
最新文章
最近回复
  • 海运: 正常情况下编译整个内核执行make menuconfig后就不会出现此提示,当单独编译单个模块...
  • oijq: 就是用的armbian的配置文件哈,按你的教程做的,在执行make LOCALVERSION=...
  • 海运: 使用armbian的配置文件,其它添加或修改自己懂的部分,不懂的就不要碰了。
  • oijq: 编译时这些选项全部选Y吗?Actions Semi Platforms (ARCH_ACTIO...
  • 海运: n1编译bbr内核模块参考这个:https://www.haiyun.me/archives/...
  • jiqz: make M=net/ipv4/ CONFIG_TCP_CONG_BBR=m modules编...
  • ruralhunter: 哦,文档里应该是对的,是.config
  • ruralhunter: cp /mnt/boot/config-4.18.7-aml-s9xxx .config这里应...
  • 海运: 你是编译不成功呢?还是编译后不能运行呢?还是运行后不能访问web界面呢?
  • 白墨: 可能不清楚就是编译安装后启动后访问不了web界面