废话说在前头
萌生写博客这个想法,主要在于好整理笔记和巩固知识,加深对在工作中遇到问题的印象,新手上路,请多指教,欢迎圈错,共同学习。
第一种
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
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="memcachedPool" class="com.danga.MemCached.SockIOPool"
factory-method="getInstance" init-method="initialize">
<constructor-arg>
<value>neeaMemcachedPool</value>
</constructor-arg>
<!-- 服务器连接地址 -->
<property name="servers">
<list>
<value>127.0.0.1:11211</value>
</list>
</property>
<!-- 初始化连接数 -->
<property name="initConn" value="20" />
<!-- 最小连接数 -->
<property name="minConn" value="10" />
<!-- 最大连接数 -->
<property name="maxConn" value="50" />
<!-- 设置tcp连接参数 nagle演算法为false(具体是什么不知道)-->
<property name="nagle" value="false" />
<!-- 连接超时时间 -->
<property name="socketTO" value="3000" />
</bean>
<bean id="memcachedClient" class="com.danga.MemCached.MemCachedClient">
<constructor-arg>
<value>neeaMemcachedPool</value>
</constructor-arg>
</bean>
<!-- 注入自己写的类 -->
<bean id="memcachedUtils" class="com.sss.comm.MemcachedUtils" />
</beans>
2.封装的memcached的使用类
package com.sss.comm;
import java.util.Date;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import com.danga.MemCached.MemCachedClient;
public class MemcachedUtils {
protected org.slf4j.Logger logger = LoggerFactory
.getLogger(this.getClass());
@Autowired
private MemCachedClient memcachedClient;
/***
* 添加缓存
*
* @param key
* @param value
* @param expiry
* 超时时间(单位:分钟)
* @throws Exception
*/
public void addCache(String key, Object value, int expiry) throws Exception {
if (StringUtils.isEmpty(key) || value == null) {
throw new IllegalArgumentException("参数错误!");
}
// 时间换成分钟
Date date = new Date();
date.setTime(date.getTime() + expiry * 60 * 1000);
boolean isSuc = memcachedClient.set(key, value, date);
if (!isSuc) {
throw new IllegalStateException("缓存存储失败!");
}
}
/***
* 查找
*
* @param key
* 键值
* @return
* @throws Exception
*/
public Object findCache(String key) throws Exception {
if (StringUtils.isEmpty(key)) {
throw new IllegalArgumentException("参数错误!");
}
return memcachedClient.get(key);
}
/***
* 删除
*
* @param key
* 键值
* @throws Exception
*/
public void deleteCache(String key) throws Exception {
if (StringUtils.isEmpty(key)) {
throw new IllegalArgumentException("参数错误!");
}
memcachedClient.delete(key);
}
}
3.使用方式
获取到MemcachedUtils类调用其方法即可。
第二种
1.附上与maven集成的依赖(不使用maven管理的,可以忽略,直接下载jar包即可,文末附上,有需要的可以下载)
<dependency>
<groupId>spy</groupId>
<artifactId>spymemcached</artifactId>
<version>2.8.12</version>
</dependency>
2.配置文件 spy-memcached.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="memcachedClient" class="net.spy.memcached.spring.MemcachedClientFactoryBean">
<property name="servers" value="127.0.0.1:11211"/>
<property name="protocol" value="BINARY"/>
<property name="transcoder">
<bean class="net.spy.memcached.transcoders.SerializingTranscoder">
<property name="compressionThreshold" value="1024"/>
</bean>
</property>
<property name="opTimeout" value="1000"/>
<property name="timeoutExceptionThreshold" value="1998"/>
<property name="hashAlg" value="KETAMA_HASH"/>
<property name="locatorType" value="CONSISTENT"/>
<property name="failureMode" value="Redistribute"/>
<property name="useNagleAlgorithm" value="false"/>
</bean>
<!-- 注入自己写的类 -->
<bean id="memcachedUtils" class="com.sss.util.MemcachedUtils" />
</beans>
3.封装的memcached使用类
注:该方式与第一种类似,只是在set方法的时候,传入参数顺序调换。缓存时间需注意,若memcached的服务端装在windows上,可能会出现运行错误。
package com.sss.util;
import net.spy.memcached.MemcachedClient;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
public class MemcachedUtils {
protected org.slf4j.Logger logger = LoggerFactory
.getLogger(this.getClass());
@Autowired
private MemcachedClient memcachedClient;
/***
* 添加缓存
*
* @param key
* @param value
* @param expiry
* 超时时间(单位:分钟)
* @throws Exception
*/
public void addCache(String key, Object value, int expiry) throws Exception {
if (StringUtils.isEmpty(key) || value == null) {
throw new IllegalArgumentException("参数错误!");
}
//Date date = new Date();
//date.setTime(date.getTime() + expiry * 60 * 1000);
memcachedClient.set(key, expiry, value);
}
public Object findCache(String key) throws Exception {
if (StringUtils.isEmpty(key)) {
throw new IllegalArgumentException("参数错误!");
}
return memcachedClient.get(key);
}
public void deleteCache(String key) throws Exception {
if (StringUtils.isEmpty(key)) {
throw new IllegalArgumentException("参数错误!");
}
memcachedClient.delete(key);
}
}
4.使用方式
获取到memcachedUtils类,调用其方法即可。
第三种
1.附上与maven集成的依赖(不用maven管理的忽略,直接下载jar包即可,文末附上,有需要的可以下载)
<dependency>
<groupId>com.googlecode.xmemcached</groupId>
<artifactId>xmemcached</artifactId>
<version>2.0.0</version>
</dependency>
2.配置文件x-memcached.xml
<!-- 注入自己写的类 -->
<bean id="cacheService" class="com.sss.util.XMemcachedClient">
</bean>
<bean name="memcachedClient"
class="net.rubyeye.xmemcached.utils.XMemcachedClientFactoryBean"
destroy-method="shutdown">
<property name="servers">
<value>127.0.0.1:11211</value>
</property>
</bean>
或者
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd">
<bean name="memcachedServers" class="java.net.InetSocketAddress"
factory-method="getAddresses">
<constructor-arg value="127.0.0.1:11211" />
</bean>
<bean name="memcachedClientBuilder" class="net.rubyeye.xmemcached.XMemcachedClientBuilder">
<constructor-arg index="0" ref="memcachedServers" />
<property name="connectionPoolSize" value="1"></property>
<property name="commandFactory">
<bean class="net.rubyeye.xmemcached.command.TextCommandFactory"></bean>
</property>
<property name="sessionLocator">
<bean class="net.rubyeye.xmemcached.impl.KetamaMemcachedSessionLocator"></bean>
</property>
<property name="transcoder">
<bean class="net.rubyeye.xmemcached.transcoders.SerializingTranscoder" />
</property>
</bean>
<bean name="memcachedClient" factory-bean="memcachedClientBuilder"
factory-method="build" destroy-method="shutdown" />
<!-- 注入自己写的类 -->
<bean id="cacheService" class="com.sss.util.XMemcachedClient">
</bean>
</beans>
3.封装的memcached使用类
package com.sss.util;
import net.rubyeye.xmemcached.MemcachedClient;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
public class XMemcachedClient {
protected org.slf4j.Logger logger = LoggerFactory
.getLogger(this.getClass());
@Autowired
private MemcachedClient memcachedClient;
/***
* 添加缓存
*
* @param key
* @param value
* @param expiry
* 超时时间(单位:分钟)
* @throws Exception
*/
public void addCache(String key, Object value, int expiry) throws Exception {
if (StringUtils.isEmpty(key) || value == null) {
throw new IllegalArgumentException("参数错误!");
}
boolean isCache = memcachedClient.add(key, expiry*60, value);
if (!isCache) {
throw new IllegalStateException("缓存存储失败!");
}
}
public Object findCache(String key) throws Exception {
if (StringUtils.isEmpty(key)) {
throw new IllegalArgumentException("参数错误!");
}
return memcachedClient.get(key);
}
public void deleteCache(String key) throws Exception {
if (StringUtils.isEmpty(key)) {
throw new IllegalArgumentException("参数错误!");
}
memcachedClient.delete(key);
}
}
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
相关推荐
在Java开发中,有三种主流的Memcached客户端库供开发者选择:官方的基于传统阻塞IO的客户端、Dustin Sallings实现的基于Java NIO的Spymemcached以及XMemcached。 1. **官方客户端** 官方提供的客户端是由Greg ...
这是MemCached的java客户端连接使用的例子,里面包含了MemCached的增删改查操作,对字符串 list set map 对象的操作等。看就会就入门了,
2.spymemcached,支持异步,单线程的memcached客户端,用到了java1.5版本的concurrent和nio,存取速度会高于前者,但是稳定性不好,测试中常 报timeOut等相关异常。 3.xmemcached,XMemcached也使用得比较广泛,而且...
1. 创建Memcached客户端实例,指定服务器地址和端口。 2. 使用Set方法存储数据,如`client.Set("key", "value")`。 3. 使用Get方法获取数据,如`string value = client.Get("key")`。 4. 使用Delete方法移除数据,如...
标题"memcached C++ 客户端 源码"表明了这是一个关于使用C++编写的memcached客户端的源代码库。memcached是一款高性能、分布式的内存对象缓存系统,常用于减轻数据库负载,提高Web应用性能。C++客户端则为开发者提供...
Dalli 是一个高性能的 Memcached 的 Ruby 客户端,支持 Memcached 1.4 ,使用新的二进制协议。 支持: JRuby 1.6 Ruby 1.9.3 Rubinius 2.0 示例代码: require 'dalli' options = { :namespace => "app...
Java开发中常用的Memcached客户端是spymemcached,它提供了简单易用的API来操作Memcached服务器。安装该库,可以通过Maven添加依赖: ```xml <groupId>net.spy</groupId> <artifactId>spymemcached <version>...
Memcached客户端 客户端是应用与Memcached交互的接口,常见的客户端库有libmemcached(C语言)、pylibmc(Python)和memcached-client(Java)等。客户端的主要任务包括: - **连接管理**:建立与服务端的TCP连接...
TreeNMS是一款redis,Memcache可视化客户端工具,采用JAVA开发,实现基于WEB方式对Redis, Memcached数据库进行管理、维护。 功能包括:NoSQL数据库的展示,库表的展示,key,value的展示,新增,修改,删除等数据的...
Memcached是一种高性能、分布式的内存对象缓存系统,用于在数据库和应用程序之间缓存数据,以减少对数据库的访问压力,提高应用的响应速度。它最初由Danga Interactive公司开发,现在已经成为互联网上广泛使用的开源...
以下是一个简单的示例,展示如何使用 Java 客户端连接到 Memcached 服务并进行数据操作: ```java import net.spy.memcached.MemcachedClient; import net.spy.memcached.AddrUtil; public class MemcachedExample...
本篇学习笔记将重点介绍如何在Java环境中使用gwhalin提供的Memcached客户端进行开发。gwhalin的Memcached Java客户端是一个轻量级、高性能的库,使得Java开发者可以轻松地与Memcached服务器进行交互。 ### 一、...
易语言Memcached协议客户端模块源码,Memcached协议客户端模块,Initialize,Connect,Timeout,Exptime,IsRunning,RunStorageCommand,AnalyzeMessage,Set,Add,Replace,Delete,Incr,Decr,Version,Get,GetMulti,...
donet客户端,donet客户端,donet客户端,donet客户端
使用Java Memcached驱动包的基本步骤通常包括:导入`mem-java.jar`库,创建Memcached客户端实例,配置服务器列表,然后调用相应接口进行数据操作。同时,可以结合`mem-doc`中的文档来获取详细的使用指南和API说明。 ...
在实际开发中,`MemcachedTest` 文件可能包含了一些示例代码或测试用例,用于演示如何使用 `MemcachedProviders` 进行缓存操作,例如初始化客户端、设置和获取缓存项、使用计数器以及管理 Session 等。 总的来说,`...
虽然无法详细解析“flghd”文件的具体内容,但了解上述知识点对于理解和使用Go语言中的Memcached客户端是非常重要的。在实际开发中,开发者可以根据项目需求选择适合的库,例如"github....
以上就是关于"memcached客户端"的详细知识点,涵盖了memcached的工作原理、客户端库的使用、分布式缓存的优势以及.NET开发的相关内容。通过理解和应用这些知识,开发者可以有效地在.NET环境中构建高性能的分布式应用...