码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-10-21 19:29:44      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:nbsp   个数   pre   this   sprint   链接   function   属性   对象   

<?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取模算法,实现多服务器存取值

标签:nbsp   个数   pre   this   sprint   链接   function   属性   对象   

原文地址:https://www.cnblogs.com/hopelooking/p/9826138.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!