spring hibernate memcached 配备

spring hibernate memcached 配置
配置所用到的版本:spring 3.X,hibernate 3.5
1.二级缓存的提供者com.googlecode.hibernate.memcached.MemcachedCacheProvider 下载地址:http://code.google.com/p/hibernate-memcached/downloads/list
2.memcached服务器端安装
window xp下载地址:http://www.splinedancer.com/memcached-win32/
安装:memcached.exe -d install 启动:memcached.exe -d start
memcached的默认端口是:11211
3.spring下的配置如下:
<!-- hibernate-memcache配置-->     
<!-- 开启二级缓存-->
<prop key="hibernate.cache.use_second_level_cache">true</prop>
<!-- 设置缓存类-->
<prop key="hibernate.cache.provider_class">com.googlecode.hibernate.memcached.MemcachedCacheProvider</prop>
<!-- 设置memcache缓存服务器端口 -->
<prop key="hibernate.memcached.servers">127.0.0.1:11211</prop>
<!-- 设置二级缓存的前缀名称 -->
<prop key="hibernate.cache.region_prefix">quality.cache.ehcache</prop>
<!-- 否使用结构化的方式缓存对象-->
<prop key="hibernate.cache.use_structured_entries">true</prop>
<!-- 是否缓存查询结果 -->
<prop key="hibernate.cache.use_query_cache">true</prop> 
4.在启动项目时候会需要如下jar包slf4j-api-1.6.1.jar,slf4j-simple-1.6.1.jar.
启动时必须启动memcached,不然会报错
5.对于要使用缓存的PO,在对应的po.hbm.xml中加入<cache usage="read-only"/>,此配置可以自己灵活掌握,不懂的可以查看hibernate官方文档
6.在web.xml中加入
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
现在hibernate用Memcached做二级缓存的配置全部做完,自己可以做一下测试.
请谨慎使用二级缓存
7.客服端调用测试工具类,我自己随便写了一个,只供参考:
我使用的spy做为Memcached客服端调用.下载地址:
http://code.google.com/p/spymemcached/

import java.io.IOException;
import java.net.InetSocketAddress;
import net.spy.memcached.MemcachedClient;

public class MemUtil {
   static MemcachedClient mc =null;
   final static MemUtil mu=null;
   static{
   try {
InetSocketAddress ica = new InetSocketAddress("127.0.0.1", 11211);
mc = new MemcachedClient(ica);
//mc.connectionLost(ica);
//mc
} catch (IOException e) {
e.printStackTrace();
}
   }
   public static MemUtil getIntance(){
   if(null==mu)return new MemUtil();
   return mu;
   }
   public void put(String key ,Object value){
   //mc.add(key, exp, o)
   mc.add(key, 9000, value);//过期时间
   }
   public Object get(String key){
   return mc.get(key);
   }
  
   public static void main(String[] args) {
   MemUtil mu = MemUtil.getIntance();
   mu.put("name", "value");
   System.out.println(mu.get("name"));
}
}