memcached-java客户端xmemcached使用总结

 

memcached-java客户端xmemcached使用总结

标签: memcachedxmemcached分布式缓存spring
  3609人阅读  评论(0)  收藏  举报
  分类:

目录(?)[+]

1. 最近调研了下memcached,之前2篇博客简单得介绍了用法,现在做个总结就当调研结束,本博客将从以下几个方面进行总结,

a. xmemcached简介

b. xmemcached的分布式

c. xmemcached支持的存储对象

d. xmemcached的容错性

e. xmemcached的性能测试

    由于memcached可以与spring集成,所以本博客以和spring集成来讲以上几点


先来看看如何与spring集成,首先在pom中引入相应的包(spring相关的不列出来)

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <dependency>  
  2.             <groupId>com.googlecode.xmemcached</groupId>  
  3.             <artifactId>xmemcached</artifactId>  
  4.             <version>2.0.0</version>  
  5.         </dependency>  

以下是properties文件:

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. # the pool size(the number of client)  
  2. memcached.connectionPoolSize=50  
  3. # in this mode, when a node out, it will throws MemcachedException when call this node  
  4. memcached.failureMode=true  
  5. #server1    
  6. memcached.server1.host=192.168.88.140  
  7. memcached.server1.port=11211  
  8. memcached.server1.weight=1  
  9. #server2    
  10. memcached.server2.host=192.168.88.141  
  11. memcached.server2.port=11211  
  12. memcached.server2.weight=1  
  13. #server3    
  14. memcached.server3.host=192.168.88.142  
  15. memcached.server3.port=11211  
  16. memcached.server3.weight=1  


spring bean配置:

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"  
  4.     xmlns:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c"  
  5.     xmlns:rabbit="http://www.springframework.org/schema/rabbit" xmlns:task="http://www.springframework.org/schema/task"  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans   
  7.                         http://www.springframework.org/schema/beans/spring-beans.xsd  
  8.                         http://www.springframework.org/schema/context   
  9.                         http://www.springframework.org/schema/context/spring-context.xsd  
  10.                         http://www.springframework.org/schema/rabbit  
  11.                         http://www.springframework.org/schema/rabbit/spring-rabbit-1.3.xsd  
  12.                         http://www.springframework.org/schema/task  
  13.                         http://www.springframework.org/schema/task/spring-task.xsd">  
  14.   
  15.     <bean id="memcachedClientBuilder" class="net.rubyeye.xmemcached.XMemcachedClientBuilder"  
  16.         p:connectionPoolSize="${memcached.connectionPoolSize}" p:failureMode="${memcached.failureMode}">  
  17.         <!-- XMemcachedClientBuilder have two arguments.First is server list,and   
  18.             second is weights array. -->  
  19.         <constructor-arg>  
  20.             <list>  
  21.                 <bean class="java.net.InetSocketAddress">  
  22.                     <constructor-arg>  
  23.                         <value>${memcached.server1.host}</value>  
  24.                     </constructor-arg>  
  25.                     <constructor-arg>  
  26.                         <value>${memcached.server1.port}</value>  
  27.                     </constructor-arg>  
  28.                 </bean>  
  29.                 <bean class="java.net.InetSocketAddress">  
  30.                     <constructor-arg>  
  31.                         <value>${memcached.server2.host}</value>  
  32.                     </constructor-arg>  
  33.                     <constructor-arg>  
  34.                         <value>${memcached.server2.port}</value>  
  35.                     </constructor-arg>  
  36.                 </bean>  
  37.                 <bean class="java.net.InetSocketAddress">  
  38.                     <constructor-arg>  
  39.                         <value>${memcached.server3.host}</value>  
  40.                     </constructor-arg>  
  41.                     <constructor-arg>  
  42.                         <value>${memcached.server3.port}</value>  
  43.                     </constructor-arg>  
  44.                 </bean>  
  45.             </list>  
  46.         </constructor-arg>  
  47.         <constructor-arg>  
  48.             <list>  
  49.                 <value>${memcached.server1.weight}</value>  
  50.                 <value>${memcached.server2.weight}</value>  
  51.                 <value>${memcached.server3.weight}</value>  
  52.             </list>  
  53.         </constructor-arg>  
  54.         <!-- BinaryCommandFactory -->  
  55.         <property name="commandFactory">  
  56.             <bean class="net.rubyeye.xmemcached.command.BinaryCommandFactory" />  
  57.         </property>  
  58.         <property name="transcoder">  
  59.             <bean class="net.rubyeye.xmemcached.transcoders.SerializingTranscoder" />  
  60.         </property>  
  61.         <property name="bufferAllocator">  
  62.             <bean class="net.rubyeye.xmemcached.buffer.SimpleBufferAllocator"></bean>  
  63.         </property>  
  64.     </bean>  
  65.     <!-- Use factory bean to build memcached client -->  
  66.     <bean id="memcachedClient" factory-bean="memcachedClientBuilder"  
  67.         factory-method="build" destroy-method="shutdown" />  
  68.   
  69. </beans>  

这样就可以用memcachedClient了

举个简单的例子说明如何使用:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. @Autowired  
  2.     private MemcachedClient memcachedClient;  
  3.   
  4.     public Map<String, User> queryFromCache(List<String> keys) {  
  5.         Map<String, User> users = new HashMap<String, User>();  
  6.         for (String key : keys) {  
  7.             try {  
  8.                 User user = memcachedClient.get(key);  
  9.                 users.put(key, user);  
  10.             } catch (TimeoutException e) {  
  11.                 e.printStackTrace();  
  12.             } catch (InterruptedException e) {  
  13.                 e.printStackTrace();  
  14.             } catch (MemcachedException e) {  
  15.                 e.printStackTrace();  
  16.             }  
  17.         }  
  18.         return users;  
  19.     }  



xmemcached简介

xmemcached是一个新Java memcached client。简单来说,Memcached 是一个高性能的分布式内存对象的key-value缓存系统,用于动态Web应用以减轻数据库负载,现在也有很多人将它作为内存式数据库在使用,memcached通过它的自定义协议与客户端交互,而XMemcached就是它的一个Java客户端实现。

Memcached的java客户端已经存在两个了:官方提供的基于传统阻塞io的客户端 、Dustin Sallings实现的基于java nio的spymemcached 。另外还有一些在此基础上的改进版本。

XMemcached的主要特性

高性能

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

支持完整的协议

Xmemcached支持所有的memcached协议,包括1.4.0正式开始使用的 二进制协议 。

支持客户端分布

Memcached的分布只能通过客户端来实现,XMemcached实现了此功能,并且提供了一致性哈希(consistent hash)算法的实现。

允许设置节点权重

XMemcached允许通过设置节点的权重来调节memcached的负载,设置的权重越高,该memcached节点存储的数据将越多,所承受的负载越大。

动态增删节点

XMemcached允许通过JMX或者代码编程实现节点的动态添加或者移除,方便用户扩展和替换节点等。

支持JMX

XMemcached通过JMX暴露的一些接口,支持client本身的监控和调整,允许动态设置调优参数、查看统计数据、动态增删节点等。

xmemcached的分布式

由于memcached不支持服务器端分布式,所以m emcached的分布只能通过客户端来实现,xmemcached实现了此功能,并且提供了一致性哈希(consistent hash)算法的实现,关于一致性hashing见http://kb.cnblogs.com/page/42734/
需要说明的是这还只是客户端分布式,不支持主从,各个节点其实还是单独存储,并且未实现存储冗余,节点挂了数据就会相应得丢失
具有如下优势:

<a target=_blank name="t9" style="color: rgb(106, 57, 6);"%3

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值