提示:有关于XMemcached在实际开发中的具体使用,查看"Java企业项目开发实践"系列博客的《第八章 企业项目开发--分布式缓存memcached

注意:本文主要参考自https://code.google.com/p/xmemcached/wiki/User_Guide_zh

 

1、为什么选用Xmemcached客户端

当下常用的三种memcached Java客户端:

  • Memcached Client for Java:memcached官方提供,基于Java BIO实现
  • SpyMemcached:基于Java NIO
  • XMemcached:基于Java NIO,并发性能优于XMemcached,实际上SpyMemcached性能也很高

三者的实验比较结果:

http://xmemcached.googlecode.com/svn/trunk/benchmark/benchmark.html

所以,我们选用XMemcached来实现客户端的编写。

 

2、XMemcached的主要特性

  • 高性能(参照上一部分)
  • 支持客户端分布(查看文章开头链接的文章中的代码:根pom.xml+MemcachedUtil类的静态块)
  • 允许设置节点权重(XMemcached允许通过设置节点的权重来调节memcached的负载,设置的权重越高,该memcached节点存储的数据将越多,所承受的负载越大)
  • 动态增删节点(JMX或zookeeper)
  • 客户端连接池
    • 默认为1,在开发中直接使用默认值即可
    • 若要配置多个连接的连接池,需要保证:数据之间是相互独立的或者全部采用CAS更新来保证原子性。
    • 在开发中,发现配置了多个连接后,会发生死锁现象(可能是我的使用方法不对),使用多客户端也是不错的选择,且并发处理的也很好。(具体实现方式查看文章开头链接的文章)

 

3、使用

具体的实际使用查看文章头部的链接。

3.1、常用类介绍

说明:

  • XMemcachedClientBuilder:XMemcachedClient的构建器,通过该构建器可以配置一系列参数,常用的参数有:
    • hash算法:setSessionLocator
      • 简单求余法(默认):ArrayMemcachedSessionLocator
      • 一致性hash:KetamaMemcachedSessionLocator(true)
        • 注意:这里我配置了一个true,该参数cwNginxUpstreamConsistent用于兼容nginx-upstream-consistent,如果系统用了nginx,最好配成true
    • 序列化协议:setCommandFactory
      • 文本协议(默认):TextCommandFactory,实现了memcached的自定义文本协议
      • 二进制协议:BinaryCommandFactory,减少了文本解析的步骤,有一些方法仅支持二进制协议
    • 序列化转化器:setTranscoder(下面是序列化转换器SerializingTranscoder的一些配置参数)
      • 压缩边界值:setCompressionThreshold,默认为16k,实际使用中根据自己的数据大小来指定,我们指定为1M
      • 压缩算法:setCompressionMode,默认为GZIP,还有一种是ZIP,使用默认值就会
    • 池数量:setConnectionPoolSize,默认为1,实际中采用多客户端的方式可以代替多连接
    • failure模式:setFailureMode(true):设置为true后,当一个memcached节点down掉后,发往该节点的请求将发往备份机,若没有备份机,直接抛出异常,而不会像之前那样,把请求打向下一个节点
    • standby:主从配置
      /*
                   * 下面这样是配置主从
                   * 其中localhost:11211是主1,localhost:11212是他的从
                   * host2:11211是主2,host2:11212是他的从
                   * 
                   * 注意:使用主从配置的前提是builder.setFailureMode(true)
                   */
                  MemcachedClientBuilder builder = 
                          new XMemcachedClientBuilder(AddrUtil.getAddressMap("localhost:11211,localhost:11212 host2:11211,host2:11212"));
      
                  builder.setFailureMode(true);//设置failure模式
      View Code

相关文章:

  • 2021-11-27
  • 2021-04-13
  • 2021-06-08
  • 2021-12-07
  • 2021-09-11
  • 2021-05-29
  • 2022-12-23
猜你喜欢
  • 2021-11-22
  • 2021-10-10
  • 2021-12-26
  • 2021-07-06
  • 2021-11-28
  • 2021-04-29
  • 2022-12-23
相关资源
相似解决方案