缓存服务器哈希一致性操作

这两天在研究缓存服务器的哈希一致性,看介绍文档对一些具体概念操作起来有点模糊,搜索到一篇具体的代码实现,记录下来,以备温习。废话不多说,直接上代码,非常简单清晰明了

<?php
/**
 *@author:xiaojiang 20140222
 * 一致性哈希php 实现
 */

class MyHash{

    //虚拟节点数
    private $_virtualCounts = 2;
    //虚拟节点集合
    private $_circleItems = array();
    //实际节点
    private $_items = array();
    //实际节点数
    private $_itemsCount = 0;
    //是否需要排序
    private $_itemRelKey = array();
    private $needSort = false;

    private $algo;

    public function __construct( hash_algo $algo = null ){
        if( !$algo ){
            $this->algo = new algo_md5();
        }
    }

    public function addItem( $_item ){

        if( isset( $this->_items[$_item]) ){
            throw new Exception("item exists");
        }
        $this->_items[$_item] = array();
        for( $i = 0; $i < $this->_virtualCounts; $i++ ){
             $_virturalKey = $this->algo->run( $_item.$i );
             $this->_circleItems[$_virturalKey] = $_item;
             $this->_itemRelKey[$_item][] = $_virturalKey;
        }
        $this->needSort = true;
        $this->_itemsCount++;
    }

    public function removeItem( $_item ){

        if( !isset( $this->_items[$_item] ) ){
            throw new Exception("item is not exists");
        }
        foreach( $this->_itemRelKey[$_item] as $key){
            unset( $this->_circleItems[$key] );
        }
        unset($this->_items[$_item]);
        $this->_itemsCount--;
    }

    public function getKey( $str ){

        if($this->needSort){
            $this->sortItems();
        }    

        $_sk = $this->algo->run( $str );
        echo $_sk;
        foreach( $this->_circleItems as $key => $_item){

            if( $key > $_sk ){
                return $_item;
            }
        }
        $ret = array_values(array_slice($this->_circleItems , 0 ,1));
        return $ret[0];

    }

    private function sortItems(){

         ksort( $this->_circleItems ,SORT_STRING );
         $this->needSort = false;
    }

    public function _t(){
        print_r($this->_circleItems);
    }
}
Interface  hash_algo{
    function run();
}
class algo_md5{
    function run( $_str ){
        return MD5( $_str );
    }
}
$_tstr = "B8aaaaa";
$thash = new MyHash();
$thash->addItem("10.100.200.3");
$thash->addItem("10.100.200.4");

//$a = $thash->getKey($_tstr);
//$thash->_t();

$thash->removeItem("10.100.200.4");
$thash->_t();

?>
时间: 2024-10-10 09:51:37

缓存服务器哈希一致性操作的相关文章

Memcache缓存服务器(Nginx+php+Memcache+MySQL)

一.MemCache简介: MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了网站访问的速度.MemCaChe是一个存储键值对的HashMap,在内存中对任意的数据(比如字符串.对象等)所使用的key-value存储,数据可以来自数据库调用.API调用,或者页面渲染的结果.MemCache设计理念就是小而强大,它简单的设计促进了快速部署.易于开发并解决面对大规模的数据缓

Linux之搭建memcache缓存服务器

Linux之搭建memcache缓存服务器(一) 一.MemCache简 session MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了网站访问的速度. MemCaChe是一个存储键值对的HashMap,在内存中对任意的数据(比如字符串.对象等)所使用的key-value存储,数据可以来自数据库调用.API调用,或者页面渲染的结果.MemCache设计理念就是小而强

memcache 搭建缓存服务器

一.MemCache简介 session MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了网站访问的速度. MemCaChe是一个存储键值对的HashMap,在内存中对任意的数据(比如字符串.对象等)所使用的key-value存储,数据可以来自数据库调用.API调用,或者页面渲染的结果.MemCache设计理念就是小而强大,它简单的设计促进了快速部署.易于开发并解决面

memcached 缓存服务器

Memcached 缓存服务器 Memcached 是高性能的分布式内存缓存服务器. 一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态web应用的速度.提高可扩展性. 主要特点: 1.C/S架构,协议简单: 2.基于libevent的事件处理(epoll): 3.Slab Allocation内存管理机制: 4.基于客户端的分布式: Memcached中保存的数据都在内存中,因此重启memcached,会导致全部数据丢失: 另外,内存容量达到指定值之后,就基于LRU(Le

图文并茂超详细搭建memcache缓存服务器(nginx+php+memcache+mysql)

博主QQ:819594300 博客地址:http://zpf666.blog.51cto.com/ 有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持! 一.MemCache简述 session MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了网站访问的速度. MemCaChe是一个存储键值对的HashMap,在内存中对任意的数据(比如字符串.对象等)所使用的k

LNMP动静分离&amp;&amp;memcache缓存服务器

博文大纲:一.MemCache简介 1.协议 2.事件处理 3.存储方式 4.通信分布式 5.memcached的应用场景 6.memcached应用中的工作流程 7.memcached的一致性Hash算法二.部署LNMP动静分离&&memcache缓存服务器 1.环境准备 2.部署Nginx服务器 3.部署PHP服务器 4.部署MySQL数据库 5.部署Memcached服务器 6.部署memcache客户端 7.使用 memcache 实现 session 共享 8.测试memcach

部署LNMP动静分离并搭建memcache缓存服务器

一.MemCache简介MemCache 是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了网站访问的速度. MemCaChe 是一个存储键值对的 HashMap,在内存中对任意的数据(比如字符串.对象等)所使用的 key-value 存储,数据可以来自数据库调用.API调用,或者页面渲染的结果.MemCache 设计理念就是小而强大,它简单的设计促进了快速部署.易于开发并解决面对大规

Nginx构建反向代理缓存服务器

防伪码:曾经沧海难为水,除却巫山不是云. 代理服务可简单的分为正向代理和反向代理: 正向代理: 用于代理内部网络对Internet的连接请求(如VPN/NAT),客户端指定代理服务器,并将本来要直接发送给目标Web服务器的HTTP请求先发送到代理服务器上,然后由代理服务器去访问Web服务器, 并将Web服务器的Response回传给客户端:  反向代理: 与正向代理相反,如果局域网向Internet提供资源,并让Internet上的其他用户可以访问局域网内资源, 也可以设置一个代理服务器, 它提

Linux之搭建redis缓存服务器

Linux之搭建redis缓存服务器(nginx+tomcat+redis+mysql实现session会话共享) 一.redis介绍 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set --有序集合)和hash(哈希类型).与memcached一样,为了保证效率,数据都是缓存在内存中.区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写