memcached三种客户端的使用

时间:2021-07-18 04:43:56
Memcached 三种客户端使用

废话说在前头

萌生写博客这个想法,主要在于好整理笔记和巩固知识,加深对在工作中遇到问题的印象,新手上路,请多指教,欢迎圈错,共同学习。

第一种

   Com.danga 包下面的memcached,需引入jar(本人用的是memcached-2.5.2.jar 文末附上附件需要的可以下载)

第二种

spyMemcached

第三种

       XMemcached  (本人偏向这种)

 

三者差异与性能比对

a.com.danga 包下的 memcached

    第一种出来的版本很早,资料也比较全。网上也有很多解释以及例子,但如今实际项目使用中几乎不用它,大概是性能与迸发低于后两种。

b. xmemcached与spymemcached

    xmemcached比spymemcached有更好的性能表现,在get、set、delete、multi-gets等操作的测试中都远远超过或者接近spymemcached。
    xmemcached在win32和linux两个平台上都有极佳的性能表现。
    xmemcached支持动态地添加或者移除memcached server,可以通过编程或者JMX来做到。
    xmemcached支持JMX,可以通过jmx调整性能参数、添加/移除memcached节点、查看统计。
    xmemcached有客户端统计,可以统计xmemcached客户端的各种操作的总次数。
    xmemcached允许调整更多的网络层参数和优化选项。
    xmemcached暂未支持二进制协议,计划在1.2版本中实现。
    xmemcached的API模型是同步的,而spymemcached的API模型是异步模型,同步模型对应用编程来说更容易使用和直观。

    xmemcached的序列化机制,是使用了spymemcached的序列化机制,并做了部分改造。

 

三者具体使用

   第一种

         1.配置文件memcached.xml

Java代码   memcached三种客户端的使用
  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"  
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  5.            http://www.springframework.org/schema/beans/spring-beans.xsd">  
  6.    
  7.     <bean id="memcachedPool" class="com.danga.MemCached.SockIOPool"  
  8.         factory-method="getInstance" init-method="initialize">  
  9.         <constructor-arg>  
  10.             <value>neeaMemcachedPool</value>  
  11.         </constructor-arg>  
  12.         <!-- 服务器连接地址 -->  
  13.         <property name="servers">  
  14.             <list>  
  15.                 <value>127.0.0.1:11211</value>  
  16.             </list>  
  17.         </property>  
  18.           
  19.         <!-- 初始化连接数 -->  
  20.         <property name="initConn" value="20" />  
  21.         <!-- 最小连接数 -->  
  22.         <property name="minConn" value="10" />  
  23.         <!-- 最大连接数 -->  
  24.         <property name="maxConn" value="50" />  
  25.         <!-- 设置tcp连接参数   nagle演算法为false(具体是什么不知道)-->  
  26.         <property name="nagle" value="false" />  
  27.         <!-- 连接超时时间 -->  
  28.         <property name="socketTO" value="3000" />  
  29.     </bean>  
  30.       
  31.     <bean id="memcachedClient" class="com.danga.MemCached.MemCachedClient">  
  32.         <constructor-arg>  
  33.             <value>neeaMemcachedPool</value>  
  34.         </constructor-arg>  
  35.     </bean>  
  36.       
  37.     <!-- 注入自己写的类 -->  
  38.     <bean id="memcachedUtils" class="com.sss.comm.MemcachedUtils" />  
  39. </beans><span style="">   </span>  

          2.封装的memcached的使用类

Java代码   memcached三种客户端的使用
  1. package com.sss.comm;  
  2.   
  3. import java.util.Date;  
  4.   
  5. import org.apache.commons.lang3.StringUtils;  
  6. import org.slf4j.LoggerFactory;  
  7. import org.springframework.beans.factory.annotation.Autowired;  
  8.   
  9. import com.danga.MemCached.MemCachedClient;  
  10.   
  11. public class MemcachedUtils {  
  12.   
  13.     protected org.slf4j.Logger logger = LoggerFactory  
  14.             .getLogger(this.getClass());  
  15.   
  16.     @Autowired  
  17.     private MemCachedClient memcachedClient;  
  18.   
  19.     /*** 
  20.      * 添加缓存 
  21.      *  
  22.      * @param key 
  23.      * @param value 
  24.      * @param expiry 
  25.      *            超时时间(单位:分钟) 
  26.      * @throws Exception 
  27.      */  
  28.     public void addCache(String key, Object value, int expiry) throws Exception {  
  29.   
  30.         if (StringUtils.isEmpty(key) || value == null) {  
  31.             throw new IllegalArgumentException("参数错误!");  
  32.         }  
  33.         // 时间换成分钟  
  34.         Date date = new Date();  
  35.         date.setTime(date.getTime() + expiry * 60 * 1000);  
  36.         boolean isSuc = memcachedClient.set(key, value, date);  
  37.         if (!isSuc) {  
  38.             throw new IllegalStateException("缓存存储失败!");  
  39.         }  
  40.     }  
  41.   
  42.     /*** 
  43.      * 查找 
  44.      *  
  45.      * @param key 
  46.      *            键值 
  47.      * @return 
  48.      * @throws Exception 
  49.      */  
  50.     public Object findCache(String key) throws Exception {  
  51.         if (StringUtils.isEmpty(key)) {  
  52.             throw new IllegalArgumentException("参数错误!");  
  53.         }  
  54.         return memcachedClient.get(key);  
  55.     }  
  56.   
  57.     /*** 
  58.      * 删除 
  59.      *  
  60.      * @param key 
  61.      *            键值 
  62.      * @throws Exception 
  63.      */  
  64.     public void deleteCache(String key) throws Exception {  
  65.         if (StringUtils.isEmpty(key)) {  
  66.             throw new IllegalArgumentException("参数错误!");  
  67.         }  
  68.         memcachedClient.delete(key);  
  69.     }  
  70.   
  71. }  

 3.使用方式

        获取到MemcachedUtils类调用其方法即可。

 

 

第二种

       1.附上与maven集成的依赖(不使用maven管理的,可以忽略,直接下载jar包即可,文末附上,有需要的可以下载)

 

Java代码   memcached三种客户端的使用
  1.           <dependency>  
  2.     <groupId>spy</groupId>  
  3.     <artifactId>spymemcached</artifactId>  
  4.     <version>2.8.12</version>  
  5. </dependency><span style="">    
  6. span>  

   2.配置文件 spy-memcached.xml

Java代码   memcached三种客户端的使用
  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"  
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  5.            http://www.springframework.org/schema/beans/spring-beans.xsd">  
  6.    
  7.    <bean id="memcachedClient" class="net.spy.memcached.spring.MemcachedClientFactoryBean">    
  8.     <property name="servers" value="127.0.0.1:11211"/>    
  9.     <property name="protocol" value="BINARY"/>    
  10.     <property name="transcoder">    
  11.       <bean class="net.spy.memcached.transcoders.SerializingTranscoder">    
  12.         <property name="compressionThreshold" value="1024"/>    
  13.       </bean>    
  14.     </property>    
  15.     <property name="opTimeout" value="1000"/>    
  16.     <property name="timeoutExceptionThreshold" value="1998"/>    
  17.      <property name="hashAlg" value="KETAMA_HASH"/>   
  18.     <property name="locatorType" value="CONSISTENT"/>     
  19.     <property name="failureMode" value="Redistribute"/>    
  20.     <property name="useNagleAlgorithm" value="false"/>    
  21.   </bean>    
  22.       
  23.     <!-- 注入自己写的类 -->  
  24.     <bean id="memcachedUtils" class="com.sss.util.MemcachedUtils" />  
  25. </beans>  

  3.封装的memcached使用类

         注:该方式与第一种类似,只是在set方法的时候,传入参数顺序调换。缓存时间需注意,若memcached的服务端装在windows上,可能会出现运行错误。

Java代码   memcached三种客户端的使用
  1. package com.sss.util;  
  2.   
  3.   
  4. import net.spy.memcached.MemcachedClient;  
  5.   
  6. import org.apache.commons.lang3.StringUtils;  
  7. import org.slf4j.LoggerFactory;  
  8. import org.springframework.beans.factory.annotation.Autowired;  
  9.   
  10.   
  11. public class MemcachedUtils {  
  12.   
  13.     protected org.slf4j.Logger logger = LoggerFactory  
  14.             .getLogger(this.getClass());  
  15.   
  16.     @Autowired  
  17.     private MemcachedClient memcachedClient;  
  18.                               
  19.     /*** 
  20.      * 添加缓存 
  21.      *  
  22.      * @param key 
  23.      * @param value 
  24.      * @param expiry 
  25.      *            超时时间(单位:分钟) 
  26.      * @throws Exception 
  27.      */  
  28.     public void addCache(String key, Object value, int expiry) throws Exception {  
  29.           
  30.         if (StringUtils.isEmpty(key) || value == null) {  
  31.             throw new IllegalArgumentException("参数错误!");  
  32.         }  
  33.         //Date date = new Date();  
  34.         //date.setTime(date.getTime() + expiry * 60 * 1000);  
  35.         memcachedClient.set(key, expiry, value);  
  36.   
  37.     }  
  38.   
  39.     public Object findCache(String key) throws Exception {  
  40.         if (StringUtils.isEmpty(key)) {  
  41.             throw new IllegalArgumentException("参数错误!");  
  42.         }  
  43.         return memcachedClient.get(key);  
  44.     }  
  45.   
  46.     public void deleteCache(String key) throws Exception {  
  47.         if (StringUtils.isEmpty(key)) {  
  48.             throw new IllegalArgumentException("参数错误!");  
  49.         }  
  50.         memcachedClient.delete(key);  
  51.     }  
  52.       
  53. }  
  54. <span style="">       </span>  

 4.使用方式

         获取到memcachedUtils类,调用其方法即可。

 

 

第三种

      1.附上与maven集成的依赖(不用maven管理的忽略,直接下载jar包即可,文末附上,有需要的可以下载)

 

Java代码   memcached三种客户端的使用
  1.           <dependency>  
  2.     <groupId>com.googlecode.xmemcached</groupId>  
  3.     <artifactId>xmemcached</artifactId>  
  4.      <version>2.0.0</version>  
  5. </dependency>  

  2.配置文件x-memcached.xml

Java代码   memcached三种客户端的使用
  1. <!-- 注入自己写的类 -->  
  2.     <bean id="cacheService" class="com.sss.util.XMemcachedClient">  
  3.     </bean>  
  4.   
  5.   
  6.     <bean name="memcachedClient"  
  7.         class="net.rubyeye.xmemcached.utils.XMemcachedClientFactoryBean"  
  8.         destroy-method="shutdown">  
  9.         <property name="servers">  
  10.             <value>127.0.0.1:11211</value>  
  11.         </property>  
  12.     </bean>  

          或者

Java代码   memcached三种客户端的使用
  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:util="http://www.springframework.org/schema/util"  
  4.     xmlns:jee="http://www.springframework.org/schema/jee"  
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  6.            http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd  
  7.            http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd">  
  8.   
  9.      <bean name="memcachedServers" class="java.net.InetSocketAddress"  
  10.         factory-method="getAddresses">  
  11.         <constructor-arg value="127.0.0.1:11211" />  
  12.     </bean>  
  13.   
  14.     <bean name="memcachedClientBuilder" class="net.rubyeye.xmemcached.XMemcachedClientBuilder">  
  15.         <constructor-arg index="0" ref="memcachedServers" />   
  16.         <property name="connectionPoolSize" value="1"></property>  
  17.         <property name="commandFactory">  
  18.             <bean class="net.rubyeye.xmemcached.command.TextCommandFactory"></bean>  
  19.         </property>  
  20.         <property name="sessionLocator">  
  21.             <bean class="net.rubyeye.xmemcached.impl.KetamaMemcachedSessionLocator"></bean>  
  22.         </property>  
  23.         <property name="transcoder">  
  24.             <bean class="net.rubyeye.xmemcached.transcoders.SerializingTranscoder" />  
  25.         </property>  
  26.     </bean>  
  27.   
  28.     <bean name="memcachedClient" factory-bean="memcachedClientBuilder"  
  29.         factory-method="build" destroy-method="shutdown" />   
  30.       
  31.     <!-- 注入自己写的类 -->  
  32.     <bean id="cacheService" class="com.sss.util.XMemcachedClient">  
  33.     </bean>  
  34.   
  35.       
  36. </beans>   

  3.封装的memcached使用类

Java代码   memcached三种客户端的使用
  1. package com.sss.util;  
  2.   
  3. import net.rubyeye.xmemcached.MemcachedClient;  
  4.   
  5. import org.apache.commons.lang3.StringUtils;  
  6. import org.slf4j.LoggerFactory;  
  7. import org.springframework.beans.factory.annotation.Autowired;  
  8.   
  9. public class XMemcachedClient {  
  10.       
  11.     protected org.slf4j.Logger logger = LoggerFactory  
  12.             .getLogger(this.getClass());  
  13.       
  14.     @Autowired  
  15.     private MemcachedClient memcachedClient;  
  16.     /*** 
  17.      * 添加缓存 
  18.      *  
  19.      * @param key 
  20.      * @param value 
  21.      * @param expiry 
  22.      *            超时时间(单位:分钟) 
  23.      * @throws Exception 
  24.      */  
  25.     public void addCache(String key, Object value, int expiry) throws Exception {  
  26.           
  27.         if (StringUtils.isEmpty(key) || value == null) {  
  28.             throw new IllegalArgumentException("参数错误!");  
  29.         }  
  30.          boolean isCache = memcachedClient.add(key, expiry*60, value);  
  31.            
  32.         if (!isCache) {  
  33.             throw new IllegalStateException("缓存存储失败!");  
  34.         }  
  35.     }  
  36.   
  37.     public Object findCache(String key) throws Exception {  
  38.         if (StringUtils.isEmpty(key)) {  
  39.             throw new IllegalArgumentException("参数错误!");  
  40.         }  
  41.         return memcachedClient.get(key);  
  42.     }  
  43.   
  44.     public void deleteCache(String key) throws Exception {  
  45.         if (StringUtils.isEmpty(key)) {  
  46.             throw new IllegalArgumentException("参数错误!");  
  47.         }  
  48.         memcachedClient.delete(key);  
  49.     }  
  50. }  
  51. <span style="">      </span>  

 4.使用方式

         获取到XMemcached类调用其方法即可。

 

 

使用心得:

      第一种方式适合单机练手,熟悉memcached。第二、三种方式项目中使用的比较多,使用配置的xml文件最好带上.properties文件,便于统一管理参数。

 

 

 由于jar总是上传失败,我就上传到csdn了,不用分直接下载可用,需要的可以点击

http://download.csdn.net/detail/u011269546/8221111

http://download.csdn.net/detail/u011269546/8221139

http://download.csdn.net/detail/u011269546/8220099

 

参考:

http://www.iteye.com/news/7717-xmemcached---faster-than-spymemcached

http://www.lingzhong.cn/tech/40454.htm

 

分享到:  memcached三种客户端的使用  memcached三种客户端的使用
参考知识库
memcached三种客户端的使用
Android知识库 38653  关注 |  3162  收录
memcached三种客户端的使用
React知识库 3831  关注 |  393  收录
memcached三种客户端的使用
人工智能基础知识库 17719  关注 |  212  收录
memcached三种客户端的使用
Java 知识库 37184  关注 |  3748  收录
评论
2 楼  yihengvip 2014-12-03  
求jar包,为何还不上传!
1 楼  TableMiao 2014-12-03  
memcached三种客户端的使用 想上传jar老是闪退,有需要的,在这里喊一下,今天传不上。自己占个位