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‘);

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

时间: 2024-10-16 04:46:47

memcache通过hash取模算法,实现多服务器存取值的相关文章

Raising Modulo Numbers_快速幂取模算法

Description People are different. Some secretly read magazines full of interesting girls' pictures, others create an A-bomb in their cellar, others like using Windows, and some like difficult mathematical games. Latest marketing research shows, that

位运算之——按位与(&amp;)操作——(快速取模算法)

由于位运算直接对内存数据进行操作,不需要转成十进制,因此处理速度非常快. 按位与(Bitwise AND),运算符号为& a&b 的操作的结果:a.b中对应位同时为1,则对应结果位也为1. 例如: 10010001101000101011001111000 & 111111100000000 --------------------------------------------- 10101100000000 对10101100000000进行右移8位得到的是101011,这就得

【转】C语言快速幂取模算法小结

(转自:http://www.jb51.net/article/54947.htm) 本文实例汇总了C语言实现的快速幂取模算法,是比较常见的算法.分享给大家供大家参考之用.具体如下: 首先,所谓的快速幂,实际上是快速幂取模的缩写,简单的说,就是快速的求一个幂式的模(余).在程序设计过程中,经常要去求一些大数对于某个数的余数,为了得到更快.计算范围更大的算法,产生了快速幂取模算法.我们先从简单的例子入手:求abmodc 算法1.直接设计这个算法: int ans = 1; for(int i =

快速乘法取模算法

原理: 32+16+4=52 1 LL qmul(LL x, LL y, LL mod) { // 乘法防止溢出, 如果p * p不爆LL的话可以直接乘: O(1)乘法或者转化成二进制加法 2 //快速乘法取模算法 3 4 LL ret = 0; 5 while(y) { 6 if(y & 1) 7 ret = (ret + x) % mod; 8 x = x * 2 % mod; 9 y >>= 1; 10 } 11 return ret; 12 } 原文地址:https://www

快速幂取模算法

什么是快速幂? 快速幂应当是快速幂取模的简称 对于一般的求幂算法,求$a^b\,\bmod\,m$,即使用循环b次的方法,复杂度是$O(b)$的,当b很大的时候,这种算法就会显得十分缓慢. 快速幂是基于以下明显的事实: $${a^b} \equiv {(a^2)^{\frac{b}{2}}} \pmod{m}\quad b\ is\ even$$ $${a^b} \equiv {(a^2)^{\frac{b}{2}}*a} \pmod{m}\quad b\ is\ odd$$ 那么我们得到这样一

快速幂取模算法【模板】

快速幂取模其实是a^b%c,这就是著名的RSA公钥加密的方法,当a,b都很大的时候,直接求是不可取的,所以就用到了快速幂取模. 首先你得明白他的原理,其实是用到了二分的思想,把b按照二进制展开 b = p(n)*2^n  +  p(n-1)*2^(n-1)  +-+   p(1)*2  +  p(0).其中p(i) (0<=i<=n)为 0 或 1. 所以此时a^b =  a^ (p(n)*2^n  +  p(n-1)*2^(n-1)  +...+  p(1)*2  +  p(0))=  a^

MySQL水平拆分(取模算法)

一:准备数据库表结构 create table user0( id int unsigned primary key , name varchar(32) not null default '', pwd varchar(32) not null default '') engine=myisam charset utf8; create table user1( id int unsigned primary key , name varchar(32) not null default ''

memcache一致性hash的php实现方法

memcache一致性hash的php实现方法 本文实例讲述了memcache一致性hash的php实现方法.分享给大家供大家参考.具体如下: 最近在看一些分布式方面的文章,所以就用php实现一致性hash来练练手,以前一般用的是最原始的hash取模做 分布式,当生产过程中添加或删除一台memcache都会造成数据的全部失效,一致性hash就是为了解决这个问题,把失效数据降到最低,相关资料可以 google一下! php实现效率有一定的缺失,如果要高效率,还是写扩展比较好 经测试,5个memca

快速幂取余算法

下面是一个快速幂的介绍: 先贴一个秦九韶算法(Horner算法)的原理: 设有项的次函数 将前项提取公因子,得 再将括号内的前项提取公因子,得 如此反复提取公因子,最后将函数化为 令 ...... 则即为所求 下面是讲解快速幂的:(By  夜せ︱深   感谢作者) 快速幂取模算法 在网站上一直没有找到有关于快速幂算法的一个详细的描述和解释,这里,我给出快速幂算法的完整解释,用的是C语言,不同语言的读者只好换个位啦,毕竟读C的人较多~ 所谓的快速幂,实际上是快速幂取模的缩写,简单的说,就是快速的求