memcache通过hash取模算法,实现多服务器存取值

Posted hopelooking

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了memcache通过hash取模算法,实现多服务器存取值相关的知识,希望对你有一定的参考价值。

<?php
//封装一个hash算法类
class Mem{
    //存储memcache的服务器个数
    private $hostCount=‘‘;
    //多个服务器
    private $host=[];

    //构造方法用来给接收值,给属性赋值
    public function __construct($hostServer)
    {
        $this->hostCount = count($hostServer);
        $this->host = $hostServer;
    }

    //计算key的位置,返回的是当前是第几台服务器
    public function position($key){
        echo sprintf(‘%u‘,crc32($key))%$this->hostCount;//取余数
        return sprintf(‘%u‘,crc32($key))%$this->hostCount;
    }

    //根据取到的位置获取当前memcache对象,链接memcache
    public function getMemObj($position){
        //在服务器池中获取某一台的地址和端口号
        $host=$this->host[$position][‘host‘];
        $port=$this->host[$position][‘port‘];
        $MemObj = new Memcache();
        $MemObj->addServer($host,$port);
        return $MemObj;
    }

    //设置值
    public function SetData($key,$value){
        //找到服务器位置
        $num = $this->position($key);
        //连接服务器
        $m = $this->getMemObj($num);
        return $m->set($key,$value);
    }

    public function GetData($key){
        //找到服务器位置
        $num = $this->position($key);
        //连接服务器
        $m = $this->getMemObj($num);
        return $m->get($key);

    }
}

$host = [
    [
        ‘host‘=>‘127.0.0.1‘,
        ‘port‘=>‘11211‘
    ],
    [
        ‘host‘=>‘127.0.0.2‘,
        ‘port‘=>‘11212‘
    ]
];
$obj = new Mem($host);
$obj->position(‘sex‘);

 

以上是关于memcache通过hash取模算法,实现多服务器存取值的主要内容,如果未能解决你的问题,请参考以下文章

memcache分布式 [一致性hash算法] 的php实现

php hash算法实现memcached分布式

php的memcached分布式hash算法,如何解决分布不均?crc32这个算法没办法把key值均匀的分布出去

分布式缓存技术memcached学习系列—— 一致性hash算法原理

memcached和redis缓存

一致性hash算法 - consistent hashing