ibatis 不支持Memcached ,只支持第三方的oscache.
所以看了一下缓存模块源码,觉得的很好扩展,于是就实现了一下,不知是否合理还请大家扳砖
SqlMapConfiguration 中新建别名
registerDefaultTypeAliases方法中添加
- typeHandlerFactory.putTypeAlias("MEMCACHED", MemcachedCacheController.class.getName());
- public interface OtherCacheHelper<T> {
- //初始化第三方缓存
- public void initCache() ;
- //获取第三方缓存句柄
- //client分布式中相关主机
- public T getCacheHandler(String client) ;
- }
采用xmemcached连接memcached server
- public class MemcacheCacheHelper implements OtherCacheHelper<XMemcachedClient> {
- private static XMemcachedClient xmc;
- public MemcacheCacheHelper() {
- initCache();
- }
- @Override
- public XMemcachedClient getCacheHandler(String client) {
- // TODO Auto-generated method stub
- return xmc;
- }
- @Override
- public void initCache() {
- // TODO Auto-generated method stub
- try {
- xmc = new XMemcachedClient("192.168.1.105", 11212);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
memcached管理类
- public class MemcachedCacheController implements CacheController {
- private XMemcachedClient cacheHandler = null;
- //keyList 管理key
- private LinkedList<String> keyList = null;
- private int cacheSize;
- public MemcachedCacheController() {
- cacheSize = 100;
- keyList = new LinkedList<String>();
- }
- @Override
- public void flush(CacheModel cacheModel) {
- // TODO Auto-generated method stub
- try {
- for (String key : keyList) {
- cacheHandler.delete(key);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- keyList.clear();
- }
- @Override
- public Object getObject(CacheModel cacheModel, Object key) {
- // TODO Auto-generated method stub
- String ckey = getKey(cacheModel, key);
- try {
- return cacheHandler.get(ckey);
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
- }
- @Override
- public void putObject(CacheModel cacheModel, Object key, Object object) {
- String ckey = getKey(cacheModel, key);
- // TODO Auto-generated method stub
- keyList.addLast(ckey);
- try {
- cacheHandler.add(ckey,0,object);
- if (keyList.size() > cacheSize) {
- String first = keyList.removeFirst();
- cacheHandler.delete(first);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- @Override
- public Object removeObject(CacheModel cacheModel, Object key) {
- // TODO Auto-generated method stub
- String ckey = getKey(cacheModel, key);
- try {
- if (keyList.contains(ckey)) {
- return cacheHandler.delete(ckey);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return null;
- }
- @Override
- public void setProperties(Properties props) {
- // TODO Auto-generated method stub
- String size = props.getProperty("cache-size");
- if (size == null) {
- size = props.getProperty("size");
- }
- if (size != null) {
- cacheSize = Integer.parseInt(size);
- }
- //获取缓存帮助类
- String cacheHelpObject = props.getProperty("cache-helper");
- String cacheclient = props.getProperty("cache-client");
- if (cacheHelpObject != null) {
- try {
- Class clazz = Resources.classForName(cacheHelpObject);
- Object obj = Resources.instantiate(clazz);
- if (obj instanceof MemcacheCacheHelper) {
- cacheHandler = ((MemcacheCacheHelper) obj)
- .getCacheHandler(cacheclient);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- //因为我认为ibaits 的缓存key 太长了,所以采用再hash的方法,再加上的缓存ID
- private String getKey(CacheModel cacheModel, Object cacheKey) {
- String key = cacheKey.toString();
- int keyhash = key.hashCode();
- String cacheId = cacheModel.getId();
- return cacheId + "_" + keyhash;
- }
- }
对应实体XML设置
- <cacheModel type="MEMCACHED" id="account-cache" serialize="true">
- <flushInterval hours="12"/>
- <property name="size" value="10" />
- <property name="cache-helper" value="com.ibatis.sqlmap.engine.cache.memcached.MemcacheCacheHelper" />
- <property name="cache-client" value="mclient0" />
- </cacheModel>
相关推荐
ibatis memcached 整合 源码 文档 ibatis memcached 整合 源码 文档
亲测ibatis2.3.4.726与memcached完美集成,二级缓存托管给memcached。开发完后测试效果不错,现把工程贡献出来与大家分享。
ibatis集成memcached做缓存 可用..经验证过
asp.net mvc2.0+Spring.net1.3+Ibatis.net+memcached的帮助,里面有spring.net和asp.netMVC的教程和一个贯穿案例。希望对大家有所帮助。绝对值这个分。
因为 mybatis-memcached 不支持 MyBatis2(iBatis),只能用在 MyBatis3 里。但是因为有的项目还跑在 MyBatis2 版本上,所以也做一个例子。 mm-mybatis3-memcached 使用了 mybatis-memcached 。因为 simple-spring-...
高性能是J2EE应用程序追求的目标,在特定硬件基础上,数据...在对 iBATIS的缓存支持情况进行了介绍和研究的基础上,并结合Spring框架和iBATIS,使用Memcached对iBATIS二级缓存进行了新的实现,使应用的性能得到了很大的提升.
NULL 博文链接:https://rainyear.iteye.com/blog/1428789
包含最简单的memcache的使用,测试类MemCached.java; 在此基础上增加了memcahce和spring的整合,顺便使用了ibati,测试类SpringMemcacheTest.java 代码简洁,适合研究,参考
3、熟练掌握目前流行开源框架(spring/springmvc/ibatis),并且对其核心思想、实现原理有一定认知;开源框架:spring;hibernate。 4、熟悉Oracle、MySQL等数据库开发与设计以及缓存系统Redis或 Memcached的设计和...
simple-spring-memcached-3.5.0.jar slf4j-api-1.6.0.jar slf4j-log4j12-1.6.0.jar solr-solrj-3.4.0.jar spring-aop-4.1.6.RELEASE.jar spring-aspects-4.1.6.RELEASE.jar spring-beans-4.1.6.RELEASE.jar ...