Java中对memcache的实现有3种比较出名
memcached client for java、
spymemcached、
以及xmemcache。
较早之前的一些比较主要是集中在java memcached client和spymemcached之间
普遍的结论是:spymemcached校之java memcached client有更高的性能,但却没有java memcached client稳定。随着java memcached client新版本的发布,一些新的对比测试标明java memcached client在性能上并不比spymemcached逊色多少,再加上java memcached client被广泛使用,表现稳定,因此在一般情况下java memcached client是首选的memcache client.
还有一个由中国人编写的名为XMemcached的后起之秀
这个产品的性能表现是非常优秀的。但在使用的普遍性和项目未来的可维护上,在选型上需要慎重考虑。
综合考虑,java memcached client是一个稳妥的选择。
spring memcache 集成
applicationContext-mem.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="properties"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:memcache.properties</value>
</list>
</property>
</bean>
<bean id="memcachedPool" class="com.danga.MemCached.SockIOPool"
factory-method="getInstance" init-method="initialize" destroy-method="shutDown">
<constructor-arg>
<value>memCachedPool</value>
</constructor-arg>
<property name="servers">
<list>
<value>${memcache.server}</value>
</list>
</property>
<property name="initConn">
<value>${memcache.initConn}</value>
</property>
<property name="minConn">
<value>${memcache.minConn}</value>
</property>
<property name="maxConn">
<value>${memcache.maxConn}</value>
</property>
<property name="maintSleep">
<value>${memcache.maintSleep}</value>
</property>
<property name="nagle">
<value>${memcache.nagle}</value>
</property>
<property name="socketTO">
<value>${memcache.socketTO}</value>
</property>
</bean>
<bean id="memCachedClient" class="com.danga.MemCached.MemCachedClient">
<constructor-arg>
<value>memCachedPool</value>
</constructor-arg>
</bean>
<!--添加bean去初始化我们自己的一个spring工具类 -->
<bean id="springContextHolder" class="com.support.cps.utils.SpringContextHolder"/>
</beans>
Memcache配置文件
memcache.properties文件内容如下:
mcache.server=127.0.0.1\:11211
memcache.initConn=20
memcache.minConn=10
memcache.maxConn=50
memcache.maintSleep=3000
memcache.nagle=false
memcache.socketTO=3000
获得spring容器的工具类
import java.util.Map;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
/**
* 类: SpringContextHolder
* 作者:
* 时间: 2012-12-29 下午03:17:47
*/
public class SpringContextHolder implements ApplicationContextAware {
private static ApplicationContext applicationContext;
/**
* 描述: 从静态变量ApplicationContext中取得Bean,
* 自动转型为所赋值对象的类型.
* 作者: wangmingli@zhangyue.com
* 时间: 2012-12-29 下午05:35:53
*/
@SuppressWarnings("unchecked")
public static <T> T getBean(String name) {
checkApplicationContext();
return (T) applicationContext.getBean(name);
}
/**
* 描述: 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
* 如果有多个Bean符合Class, 取出第一个
* 作者: wangmingli@zhangyue.com
* 时间: 2012-12-29 下午05:45:35
*/
@SuppressWarnings("unchecked")
public static <T> T getBean(Class<T> clazz) {
checkApplicationContext();
Map beanMaps = applicationContext.getBeansOfType(clazz);
if (beanMaps != null && !beanMaps.isEmpty()) {
return (T) beanMaps.values().iterator().next();
} else {
return null;
}
}
/**
* 描述: 检查ApplicationContext是否为空
* 作者: wangmingli@zhangyue.com
* 时间: 2012-12-29 下午05:42:49
*/
private static void checkApplicationContext() {
if (applicationContext == null) {
throw new IllegalStateException(
"applicaitonContext未注入,请在applicationContext.xml中定义SpringContextHolder");
}
}
/**
* 描述: 取得存储在静态变量中的ApplicationContext.
* 作者: wangmingli@zhangyue.com
* 时间: 2012-12-29 下午05:44:49
*/
public static ApplicationContext getApplicationContext() {
checkApplicationContext();
return applicationContext;
}
/**
* 方法: setApplicationContext
* 描述: 实现ApplicationContextAware接口的context注入函数, 将其存入静态变量.
* 在配置文件中配置了bean的初始化,然后他就可以用于获得spring容器中的东西了
* @param applicationContext
* @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext)
*/
public void setApplicationContext(ApplicationContext applicationContext) {
SpringContextHolder.applicationContext = applicationContext;
}
}
首先说一下ApplicationContextAware这个接口,这个接口中有一个方法:
void setApplicationContext(ApplicationContext applicationContext)
下面是这个方法的简单说明:
Set the ApplicationContext that this object runs in.Normally this call will be used to initialize the object.
我们在配置文件中配置了bean的初始化,然后他就可以用于获得spring容器中的东西了。
public class MemcacheUtil {
public static MemCachedClient getMemCachedClient() {
return SpringContextHolder.getBean("memcachedClient");
}
}
分享到:
相关推荐
**Java开发中的Memcache原理及实现** Memcache是一款高性能、分布式内存对象缓存系统,它被广泛用于提高Web应用程序的性能。Memcache的工作原理基于内存存储,它将数据以键值对的形式存储,并通过网络协议提供服务...
你可以使用`cd`命令来切换目录,例如`cd C:\path\to\memcache`。 - 在命令提示符中,输入`memcached.exe -d install`。这个命令会将Memcache注册为一个Windows服务, `-d` 参数表示以服务模式运行,`install` 参数...
1. **客户端库**:MemCache有多种语言的客户端库,如PHP、Python、Java、Ruby等,可以方便地在应用程序中集成MemCache。 2. **连接与设置**:使用客户端连接到MemCache服务器,设置连接参数,如IP地址和端口号。 3. ...
To build interesting and interactive web applications developers are turning to Java. However, building and deploying scalable web applications using Google Web Toolkit and Google App Engine for Java...
System.out.println("Connection to server sucessful."); // 添加数据 Future fo = mcc.set("runoob", 900, "Free Education"); // 打印状态 System.out.println("set status:" + fo.get()); // 输出 ...
- **过期策略**:Memcached支持设置数据的生存时间(TTL,Time To Live),到达该时间后,数据会被自动删除。 - **内存管理**:当内存空间不足时,采用LRU(Least Recently Used)算法,淘汰最近最少使用的数据。 ...
Java 堆分为新生代和老年代,新生代又分为 Eden、From Survivor 和 To Survivor 三个空间。eden 内存不足时,发生一次 minor GC,会把 From Survivor 和 Eden 的对象复制到 To Survivor,下次的 To Survivor 就变成...
PHP、Python、Java、C#等编程语言都有相应的客户端库,比如PHP的`php_memcache.dll`或`php_memcached.dll`扩展。 5. **性能优化**:理解Memcached的数据结构和工作原理对于性能优化至关重要。例如,Memcached使用...
7. **数据过期策略**:Memcached提供了TTL(Time To Live)机制,允许为每个键设置一个有效期,过期后数据将自动被清理,以确保内存的有效利用。 8. **安全性**:虽然Memcached默认仅在本地运行且无任何安全措施,...
Memcached支持为每个存储的数据设置一个生存时间(TTL,Time To Live),超过这个时间后,数据将自动从缓存中删除。此外,还有一种LRU(Least Recently Used)策略,当内存空间不足时,最近最少使用的数据会被优先...
根据实际需求和性能表现,可能还需要进行一些调优工作,比如调整Memcached的缓存大小、TTL(Time To Live)设置,或者Nginx的负载均衡策略。 通过以上步骤,你可以实现一个使用Tomcat 7、Nginx和Memcached的高性能...
美国Facebok.com,中国Yeejee.com,日本mixi.jp均采用开源分布式缓存服务器Memcache 52 3,图片缓存和加 52 memcached+squid+apache deflate解决网站大访问量问题 52 FeedBurner:基于MySQL和JAVA的可扩展Web...
5. **数据过期策略**:理解Memcached如何处理数据的生命周期,如设置TTL(Time To Live)来自动过期数据,或者使用LRU(Least Recently Used)策略进行内存管理。 6. **分布式策略**:学习如何在多台服务器上部署...
Memcache — Memcache Functions mhash — Mhash Functions Mimetype — Mimetype Functions Ming (flash) — Ming functions for Flash Misc. — Miscellaneous Functions mnoGoSearch — mnoGoSearch Functions MS...
Memcache — Memcache Functions mhash — Mhash Functions Mimetype — Mimetype Functions Ming (flash) — Ming functions for Flash Misc. — Miscellaneous Functions mnoGoSearch — mnoGoSearch Functions MS...
- **数据过期机制**:每个存储的数据项都有一个生存时间(TTL,Time To Live),超过这个时间,数据会被自动删除。 2. **安装与配置** - **安装**:Memcached通常可以通过包管理器在多种操作系统上安装,如在...
Memcache Functions LXXXVII. Mhash Functions LXXXVIII. Mimetype Functions LXXXIX. Ming functions for Flash XC. Miscellaneous Functions XCI. mnoGoSearch Functions XCII. Microsoft SQL Server Functions ...
`memcached` 支持多种编程语言的客户端库,如Python的`python-memcache`,PHP的`memcached`扩展,Java的`spymemcached`等。通过这些库,你可以方便地进行数据的存取操作。 #### 2. 基本操作 - **设置缓存**: `set...
Memcache Functions LXXXVII. Mhash Functions LXXXVIII. Mimetype Functions LXXXIX. Ming functions for Flash XC. Miscellaneous Functions XCI. mnoGoSearch Functions XCII. Microsoft SQL Server ...
45. PDO Driver How-To 46. Zend API:深入 PHP 内核 47. 扩展 PHP 3 VIII. FAQ:常见问题 48. 一般信息 49. 邮件列表 50. 获取 PHP 51. 数据库问题 52. 安装常见问题 53. 编译问题 54. 使用 PHP 55. PHP 和 HTML 56...