国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - PHP實現的服務器一致性hash分布算法示例

PHP實現的服務器一致性hash分布算法示例

2019-09-12 13:52flynetcn PHP教程

這篇文章主要介紹了PHP實現的服務器一致性hash分布算法,結合實例形式分析了php一致性hash分布算法類的具體定義與相關使用技巧,需要的朋友可以參考下

本文實例講述了PHP實現的服務器一致性hash分布算法。分享給大家供大家參考,具體如下:

<?php
/**
 * 對服務器進行一致性hash分布算法
 */
class HashRing
{
  private $servers = array();
  private $nodeList = array();
  private $nodeHashList = array();
  private $nodeTotalNum = 0;
  private $virtualNodeNum = 32;
  private $keyHash = '';
  public function __construct($servers)
  {
    $this->servers = $servers;
    foreach ($servers as $server) {
      for ($i = 0; $i < $this->virtualNodeNum; $i++) {
        $this->nodeList[sprintf("%u", crc32($server.'-'.$i))] = array($server, $i);
      }
    }
    ksort($this->nodeList);
    $this->nodeHashList = array_keys($this->nodeList);
  }
  private function getNodeIndex($key)
  {
    $this->keyHash = sprintf("%u", crc32($key));
    if ($this->keyHash > end($this->nodeHashList)) {
      $this->keyHash = $this->keyHash % end($this->nodeHashList);
    }
    if ($this->keyHash <= reset($this->nodeHashList)) {
      return 0;
    }
    $this->nodeTotalNum = count($this->nodeHashList);
    return $this->binaryChopIndex(0, $this->nodeTotalNum);
  }
  private function binaryChopIndex($l=0, $r=0)
  {
    if ($l < $r) {
      $avg = intval(($l+$r) / 2);
      if ($this->nodeHashList[$avg] == $this->keyHash) {
        return $avg;
      } elseif ($this->keyHash < $this->nodeHashList[$avg] && ($avg > 0)) {
        return $this->binaryChopIndex($l, $avg-1);
      } else {
        return $this->binaryChopIndex($avg+1, $r);
      }
    } else {
      return $l;
    }
  }
  public function getServersByKey($key, $num=1)
  {
    $index = $this->getNodeIndex($key);
    $server = $this->nodeList[$this->nodeHashList[$index]];
    if ($num == 1) {
      return $server[0];
    }
    if ($num >= count($this->servers)) {
      $num = count($this->servers);
    }
    $result = array($server[0]);
    for ($i=$index+1; true; $i++) {
      if ($i >= $this->nodeTotalNum) {
        $i = 0;
      }
      $nextServer = $this->nodeList[$this->nodeHashList[$i]];
      if (!in_array($nextServer[0], $result)) {
        $result[] = $nextServer[0];
      }
      if (count($result) == $num) {
        break;
      }
    }
    return $result;
  }
}
//示例
$servers = array(
  '127.0.0.1:11211',
  '127.0.0.1:11212',
  '127.0.0.1:11213',
  '127.0.0.1:11214',
  '127.0.0.1:11215'
);
$obj = new HashRing($servers);
$servers = $obj->getServersByKey('testkey', 2);
print_r($servers);
echo "\n";

運行結果:

Array
(
    [0] => 127.0.0.1:11214
    [1] => 127.0.0.1:11211
)

希望本文所述對大家PHP程序設計有所幫助。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 91嫩草精品 | 亚洲成人精品在线 | 日韩综合网| 红桃视频一区二区三区免费 | 韩日精品一区 | 午夜影视 | 中文亚洲字幕 | 国产欧美精品一区二区三区 | 亚州av一区| 国产精品久久久久久久久大全 | 亚洲精品一区二区三区蜜桃久 | 自拍偷拍一区 | 91av入口| 日韩在线观看中文字幕 | 91久久91久久精品免观看 | 成人免费色 | 国产精品福利电影网 | 精品国产免费久久久久久尖叫 | 亚洲精品久久久久久久久久吃药 | 亚洲精品久久久久久下一站 | 成人在线观 | 免费国产一区二区 | 国产最新精品 | 久久艹天天艹 | 成人在线观看免费视频 | 最近2019年好看中文字幕视频 | 精品网站www | 午夜电影网址 | 亚洲精品免费av | 亚洲视频日韩 | 男人天堂av网 | 日韩免费av| 成人国产精品视频 | 一本色道久久综合狠狠躁的推荐 | 日本国产欧美 | 久久综合九九 | 亚洲精品一区二区三区在线观看 | 午夜精品一区二区三区在线视频 | 久久久久久精 | 亚洲国产美女视频 | 四影虎影ww4hu55.com |