Memcached集群实现及原理介绍

一、Memcached集群介绍

1.自身通过算法保证数据唯一性
2.集群形式对用户和Memcached都是透明的
3.Memcached的集群是通过客户端实现的
4.Memcached服务端相互不认识

二、代码实现

我们开启两个Memcached,端口号分别为2222和6666

bin/memcached -d -u root -l 192.168.84.128 -p 2222 -c 128 -m 100 -P myPid

telnet 192.168.84.128 2222
 

bin/memcached -d -u root -l 192.168.84.128 -p 6666 -c 128 -m 100 -P myPid
telnet 192.168.84.128 6666


// 连接配置
        MemcachedClientBuilder memcachedClientBuilder =
                new XMemcachedClientBuilder(AddrUtil.getAddresses("192.168.84.128:2222 192.168.84.128:6666"));

演示集群操作

@Test
    public void cluTest() throws  Exception{
        MemcachedClient memcachedClient = ConnectonHelper.getClient();
        memcachedClient.set("k1",0,"Hello zhangsan!!!");
        String k1Value = memcachedClient.get("k1");
        System.out.println("k1Value="+k1Value);

        memcachedClient.set("k2",0,"Hello lisi!!!");
        String k2Value = memcachedClient.get("k2");
        System.out.println("k2Value="+k2Value);
    }
-----------------------------------
 

k1和k2已经保存成功,但是具体存在那个memcached上,是由客户端内部的Hash算法计算的

下面分别连接两个memcached查看数据存储

端口为2222的memcached:

端口为6666的memcached:

三、Memcached常见分布式算法

1.余数Hash

将传入的key转换为Hash值
获取服务器数量列表
取余:Hash值%服务器数量
通过余数来选择具体存放/查询的服务器
优缺点:简便易理解、增加/减少节点会造成灾难

2.一致性Hash

将服务器列表+虚拟节点分布在0-2的32次方的一个圆上
将传入的key转换为Hash值
获取服务器数量列表
取余:Hash值%服务器数量
通过余数来选择具体存放/查询的服务器
如果余数命中虚拟节点,则会顺时针寻找真实Memcached服务
-----------------------------------
©著作权归作者所有:来自51CTO博客作者风云正的原创作品,请联系作者获取转载授权,否则将追究法律责任
Memcached集群实现及原理介绍
https://blog.51cto.com/u_4427045/6095974

四、补充

Memcached的两段Hash:

客户端通过Hash算法寻找存储/查询节点
进入Memcached以后,通过Hash算法,寻找具体的Chunk

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值