`
jetway
  • 浏览: 483753 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

ibatis Memcached

 
阅读更多

ibatis 不支持Memcached ,只支持第三方的oscache. 
所以看了一下缓存模块源码,觉得的很好扩展,于是就实现了一下,不知是否合理还请大家扳砖 

SqlMapConfiguration 中新建别名 

registerDefaultTypeAliases方法中添加 

Java代码  收藏代码
  1. typeHandlerFactory.putTypeAlias("MEMCACHED", MemcachedCacheController.class.getName());  




Java代码  收藏代码
  1. public interface OtherCacheHelper<T> {  
  2.          //初始化第三方缓存  
  3.     public void initCache() ;  
  4.          //获取第三方缓存句柄  
  5.            //client分布式中相关主机  
  6.     public T getCacheHandler(String client) ;  
  7. }  




采用xmemcached连接memcached server 

Java代码  收藏代码
  1. public class MemcacheCacheHelper implements OtherCacheHelper<XMemcachedClient> {  
  2.   
  3.     private static XMemcachedClient xmc;  
  4.   
  5.     public MemcacheCacheHelper() {  
  6.         initCache();  
  7.     }  
  8.   
  9.     @Override  
  10.     public XMemcachedClient getCacheHandler(String client) {  
  11.         // TODO Auto-generated method stub  
  12.         return xmc;  
  13.     }  
  14.   
  15.     @Override  
  16.     public void initCache() {  
  17.         // TODO Auto-generated method stub  
  18.         try {  
  19.             xmc = new XMemcachedClient("192.168.1.105"11212);  
  20.         } catch (Exception e) {  
  21.             e.printStackTrace();  
  22.         }  
  23.   
  24.     }  
  25.   
  26. }  



memcached管理类 

Java代码  收藏代码
  1. public class MemcachedCacheController implements CacheController {  
  2.   
  3.     private XMemcachedClient cacheHandler = null;  
  4.   
  5.     //keyList 管理key  
  6.          private LinkedList<String> keyList = null;  
  7.   
  8.     private int cacheSize;  
  9.   
  10.     public MemcachedCacheController() {  
  11.         cacheSize = 100;  
  12.         keyList = new LinkedList<String>();  
  13.     }  
  14.   
  15.   
  16.     @Override  
  17.     public void flush(CacheModel cacheModel) {  
  18.         // TODO Auto-generated method stub  
  19.         try {  
  20.             for (String key : keyList) {  
  21.                 cacheHandler.delete(key);  
  22.             }  
  23.         } catch (Exception e) {  
  24.             e.printStackTrace();  
  25.         }  
  26.         keyList.clear();  
  27.     }  
  28.   
  29.     @Override  
  30.     public Object getObject(CacheModel cacheModel, Object key) {  
  31.         // TODO Auto-generated method stub  
  32.         String ckey = getKey(cacheModel, key);  
  33.   
  34.           
  35.         try {  
  36.             return cacheHandler.get(ckey);  
  37.         } catch (Exception e) {  
  38.             e.printStackTrace();  
  39.             return null;  
  40.         }  
  41.     }  
  42.   
  43.     @Override  
  44.     public void putObject(CacheModel cacheModel, Object key, Object object) {  
  45.         String ckey = getKey(cacheModel, key);  
  46.         // TODO Auto-generated method stub  
  47.         keyList.addLast(ckey);  
  48.           
  49.         try {  
  50.             cacheHandler.add(ckey,0,object);  
  51.             if (keyList.size() > cacheSize) {  
  52.                 String first = keyList.removeFirst();  
  53.                 cacheHandler.delete(first);  
  54.             }  
  55.         } catch (Exception e) {  
  56.             e.printStackTrace();  
  57.         }  
  58.   
  59.     }  
  60.   
  61.     @Override  
  62.     public Object removeObject(CacheModel cacheModel, Object key) {  
  63.         // TODO Auto-generated method stub  
  64.         String ckey = getKey(cacheModel, key);  
  65.         try {  
  66.             if (keyList.contains(ckey)) {  
  67.                 return cacheHandler.delete(ckey);  
  68.             }  
  69.         } catch (Exception e) {  
  70.             e.printStackTrace();  
  71.         }  
  72.   
  73.         return null;  
  74.     }  
  75.   
  76.     @Override  
  77.     public void setProperties(Properties props) {  
  78.         // TODO Auto-generated method stub  
  79.         String size = props.getProperty("cache-size");  
  80.         if (size == null) {  
  81.             size = props.getProperty("size");  
  82.         }  
  83.         if (size != null) {  
  84.             cacheSize = Integer.parseInt(size);  
  85.         }  
  86.         //获取缓存帮助类  
  87.                   String cacheHelpObject = props.getProperty("cache-helper");  
  88.           
  89.                   String cacheclient = props.getProperty("cache-client");  
  90.         if (cacheHelpObject != null) {  
  91.             try {  
  92.                 Class clazz = Resources.classForName(cacheHelpObject);  
  93.                 Object obj = Resources.instantiate(clazz);  
  94.                 if (obj instanceof MemcacheCacheHelper) {  
  95.                     cacheHandler = ((MemcacheCacheHelper) obj)  
  96.                             .getCacheHandler(cacheclient);  
  97.                 }  
  98.             } catch (Exception e) {  
  99.                 e.printStackTrace();  
  100.             }  
  101.   
  102.         }  
  103.   
  104.     }  
  105.   
  106. //因为我认为ibaits 的缓存key 太长了,所以采用再hash的方法,再加上的缓存ID  
  107.     private String getKey(CacheModel cacheModel, Object cacheKey) {  
  108.         String key = cacheKey.toString();  
  109.         int keyhash = key.hashCode();  
  110.         String cacheId = cacheModel.getId();  
  111.         return cacheId + "_" + keyhash;  
  112.     }  
  113.   
  114. }  



对应实体XML设置 

Xml代码  收藏代码
  1. <cacheModel type="MEMCACHED" id="account-cache" serialize="true">  
  2.     <flushInterval hours="12"/>  
  3.     <property name="size" value="10" />  
  4.     <property name="cache-helper" value="com.ibatis.sqlmap.engine.cache.memcached.MemcacheCacheHelper" />  
  5.     <property name="cache-client" value="mclient0" />  
  6.   </cacheModel>  
分享到:
评论

相关推荐

    ibatis memcached

    标题中的“ibatis memcached”指的是将MyBatis(原名iBATIS)这个流行的Java持久层框架与Memcached这个分布式内存对象缓存系统相结合,实现数据的高效缓存管理。这种集成允许开发者将MyBatis的二级缓存功能扩展到...

    ibatis memcached 整合 源码 文档

    在IT行业中,数据库缓存是提高应用程序性能的关键技术之一,Memcached是一款广泛使用的分布式内存对象缓存系统,而iBatis则是一个优秀的SQL映射框架。本文将详细讲解如何将iBatis与Memcached整合,以及相关的源码...

    ibatis_with_memcached

    本项目"ibatis_with_memcached"就是关于如何将Ibatis与Memcached集成,实现高效的数据库缓存策略的实例。 Ibatis是一个基于Java的SQL映射框架,它允许开发者编写SQL语句并与Java对象进行绑定,从而避免了传统的JDBC...

    asp.net mvc2.0+Spring.net1.3+Ibatis.net+memcached文档

    asp.net mvc2.0+Spring.net1.3+Ibatis.net+memcached的帮助,里面有spring.net和asp.netMVC的教程和一个贯穿案例。希望对大家有所帮助。绝对值这个分。

    spring-mybatis-memcached.zip_Memcached java_annotation_mybatis_m

    因为 mybatis-memcached 不支持 MyBatis2(iBatis),只能用在 MyBatis3 里。但是因为有的项目还跑在 MyBatis2 版本上,所以也做一个例子。 mm-mybatis3-memcached 使用了 mybatis-memcached 。因为 simple-spring-...

    Maven+spring+ibatis+struts2.0+MQ+Memcached 项目构建

    【标题】"Maven+Spring+Ibatis+Struts2.0+MQ+Memcached 项目构建"涉及了多个核心的Java开发技术和框架,这些技术的集成应用在现代企业级应用开发中非常常见。让我们逐一深入理解这些技术及其在项目中的作用。 1. ...

    ibatis与memchaced使用说明

    ### ibatis与memcached使用说明 #### 一、ibatis简介及缓存机制概述 ibatis是一个基于Java的持久层框架,它简化了Java应用程序与数据库之间的交互过程。ibatis的核心功能之一就是提供了缓存机制,尽管缓存并不是...

    Ibatis.net 分页

    同时,考虑缓存策略,比如使用Redis或Memcached等缓存系统,减少对数据库的访问次数。 此外,还要注意防止SQL注入,尤其是在动态SQL中,应使用参数化查询或预编译语句,避免直接拼接用户输入的字段。 总结起来,...

    基于 Spring和 Memcached的 iBATIS二级 缓存的研究与应用 (2009年)

    高性能是J2EE应用程序追求的目标,在特定硬件基础上,数据...在对 iBATIS的缓存支持情况进行了介绍和研究的基础上,并结合Spring框架和iBATIS,使用Memcached对iBATIS二级缓存进行了新的实现,使应用的性能得到了很大的提升.

    Memcache+spring+ibatis例子,包含单纯memcache例子

    包含最简单的memcache的使用,测试类MemCached.java; 在此基础上增加了memcahce和spring的整合,顺便使用了ibati,测试类SpringMemcacheTest.java 代码简洁,适合研究,参考

    JavaEye论坛热点月报 总第5期

    11. **Ibatis2支持Annotation**:Ibatis是一个流行的持久层框架,报告中介绍了如何让Ibatis2支持注解,使代码更简洁,配置更直观。 12. **内存泄漏分析**:通过Java的垃圾收集(GC)日志,开发者可以分析内存泄漏问题...

    大数据功能模块概要设计-V1.1Word版.docx

    - **数据库**:关系型数据库如Oracle、MySQL,以及NoSQL数据库如MongoDB、Hadoop、Hive、HBase、Memcached、Redis,Oracle要求10g以上版本。 - **开发框架**:Java服务端推荐Struts2+Spring3+iBatis或MyBatis,...

    大数据功能模块概要设计_V1.1.pdf

    在技术选型上,文档推荐了中间件如weblogic、websphere、jbos、jetty和tomcat,数据库包括关系型的Oracle和MySQL,以及NoSQL数据库如mongodb、hadoop、hive、hbase、memcached和redis。底层开发框架方面,struts2、...

    大型网站数据库优化大型网站数据库优化.docx

    同时,选用高效的编程框架,如Spring+Ibatis,Spring的IOC机制能有效避免频繁创建对象,而Ibatis的直接SQL操作和缓存机制则能提升数据库交互效率。 2. **数据库缓存与优化**:DBA的角色在此过程中不可或缺,他们...

    Java软件开发工程师面试题宝典.pdf

    22. **Cache(Ehcache, Memcached)**:缓存系统用于提高数据访问速度,理解它们的工作原理和配置。 23. **SQL优化**:包括索引使用、子查询优化、JOIN操作等,以提高查询效率。 24. **JVM垃圾回收**:理解GC的...

    大数据功能模块概要设计.doc

    NoSQL数据库如mongodb、hadoop、hive、hbase、memcached、redis等用于非结构化数据处理。 3.3 **底层开发框架**:Java服务端开发推荐使用struts2 + spring3+ ibatis(mybatis),前台WEB开发框架建议使用JS框架如...

    Java软件开发工程师面试题宝典.doc

    21. **缓存技术**:如Ehcache和Memcached,它们用于提升数据访问速度,减少数据库负载。 22. **SQL优化**:包括查询优化、索引使用、子查询优化等,以提高查询效率。 23. **Oracle执行计划**:学习如何分析Oracle...

Global site tag (gtag.js) - Google Analytics