Xmemcached

Memcached 是一个高性能的分布式内存对象的 key-value 缓存系统,用于动态 Web 应用以减轻数据库负载。

1、与 Spring 框架集成,通过 XMemcachedClientFactoryBean类,与spring框架集成。

<bean name="memcachedClient" destroy-method="shutdown" 
                class="net.rubyeye.xmemcached.utils.XMemcachedClientFactoryBean"> 
<property name="servers"> 
<value>host1:port1 host2:port2 host3:port3</value> 
</property> 
<property name="weights"> 
<list> 
<value>1</value> 
<value>2</value> 
<value>3</value> 
</list> 
</property> 
<property name="connectionPoolSize" value="5"></property>
<property name="sessionLocator"> 
<bean class="net.rubyeye.xmemcached.impl.KetamaMemcachedSessionLocator"/> 
</property> 
<property name="transcoder"> 
<bean class="net.rubyeye.xmemcached.transcoders.SerializingTranscoder" /> 
</property> 
<property name="bufferAllocator"> 
       <bean class="net.rubyeye.xmemcached.buffer.SimpleBufferAllocator"> 
</property> 
</bean> 

 

参数含义
servers

服务器列表,格式: ip:port

weights主机映射,host1对应1号,host2对应2号...
sessionLocatorSession分配器,自带的,影响分布式
transcoder通信编码方式
bufferAllocator缓冲区分配器

 

2、和同类型的memcached客户端相比,XMemcached有什么特点?

    1)高性能:XMemcached同样是基于java nio的客户端,java nio相比于传统阻塞io模型来说,有效率高(特别在高并发下)和资源耗费相对较少的优点。传统阻塞IO为了提高效率,需要创建一定数量的连接形成连接池,而nio仅需要一个连接即可(当然,nio也是可以做池化处理),相对来说减少了线程创建和切换的开销,这一点在高并发下特别明显。因此XMemcached与Spymemcached在性能都非常优秀。

    2)客户端连接池:(如上面配置中的斜黑体部分)刚才已经提到java nio通常对一个memcached节点使用一个连接,而XMemcached同样提供了设置连接池的功能,对同一个memcached可以创建N个连接组成连接池来提高客户端在高并发环境下的表现,而这一切对使用者来说却是透明的。

3、性能优化
   XMemcached对操作主要的优化手段:
(1)get的优化
         连续的get操作将被合并成一个get操作提交,最多合并mergeFactor个命令,这个参数可以通过
         XMemcachedClient.setMergeFactor(int); default is 150
         方法设置,默认是150,不推荐设置过大的数值。get优化默认是开启的,可以通过
        XMemcachedClient.setOptimizeMergetGet(false); //default is true,recommend true关闭。
(2)ByteBuffer合并
        xmemcached会将连续的操作形成的ByteBuffer合并成一个大的ByteBuffer,大小接近socket的发送缓冲区大小,以最大限度地提升发送效率,这个优化默认也是开启  的,   可以通过
        XMemcachedClient.setOptimizeMergeBuffer(false);//default is true,recommend true
         关闭。不推荐关闭,除非你的应用缓存的数据特别大。
  (3)网络层的优化
     默认采用阻塞读,在局域网内能带来更好的效率,可以设置网络参数,linux系统在多节点memcached下,强烈建议将读线程数设置大于0,接近或者等于memcached节点  数(具体参数看你的测试结果);在windows系统,推荐采用默认设置(也就是单线程):
    MemcachedClientBuilder builder = new XMemcachedClientBuilder(
   AddrUtil.getAddresses("localhost:12000"));
   builder.setBufferAllocator(new CachedBufferAllocator());
   //采用CachedBufferAllocator   
   builder.getConfiguration().setReadThreadCount(2); // 设置读线程数   
   MemcachedClient client=builder.build();
     如上面代码所示,你可以采用CachedBufferAllocator作为ByteBuffer的分配器,这个分配器将在ThreadLocal中缓存创建的ByteBuffer重复利用,使用此分配器经测试没有带   来显著的性能提升,慎用。
更多网络优化参数,可以通过
XMemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses("localhost:12000"));  
builder.getConfiguration().setHandleReadWriteConcurrently(true);  
builder.getConfiguration().setReuseAddress(true);  
builder.getConfiguration().setTcpNoDelay(true);  
builder.getConfiguration().setTcpRecvBufferSize(8*1024);
MemcachedClient client=builder.build();


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值