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>
分享到:
相关推荐
3. **分布式支持**:Memcached支持分布式部署,可以应对高并发场景,保证服务的稳定性和可扩展性。 4. **缓存策略**:Ibatis与Memcached集成后,可以设置不同的缓存策略,如LRU(最近最少使用)、FIFO(先进先出)等...
在IT行业中,数据库缓存是提高应用程序性能的关键技术之一,Memcached是一款广泛使用的分布式内存对象缓存系统,而iBatis则是一个优秀的SQL映射框架。本文将详细讲解如何将iBatis与Memcached整合,以及相关的源码...
标题中的“ibatis memcached”指的是将MyBatis(原名iBATIS)这个流行的Java持久层框架与Memcached这个分布式内存对象缓存系统相结合,实现数据的高效缓存管理。这种集成允许开发者将MyBatis的二级缓存功能扩展到...
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-...
- `java_memcached-release_2.0.1.jar`: 提供了memcached客户端支持。 - `apache-commo-lang.jar`: 通用工具类,可能用于某些辅助功能。 ##### 初始化配置: ```xml <bean class="com.ibatis.sqlmap.engine.cache....
【标题】"Maven+Spring+Ibatis+Struts2.0+MQ+Memcached 项目构建"涉及了多个核心的Java开发技术和框架,这些技术的集成应用在现代企业级应用开发中非常常见。让我们逐一深入理解这些技术及其在项目中的作用。 1. ...
2. **动态SQL**:Ibatis.NET支持动态SQL,可以直接在XML映射文件中编写分页查询语句。利用`<if>`标签检查参数是否为空,然后在查询中加入ORDER BY和LIMIT子句。 ```xml SELECT * FROM Users WHERE 1=1 != null...
高性能是J2EE应用程序追求的目标,在特定硬件基础上,数据...在对 iBATIS的缓存支持情况进行了介绍和研究的基础上,并结合Spring框架和iBATIS,使用Memcached对iBATIS二级缓存进行了新的实现,使应用的性能得到了很大的提升.
包含最简单的memcache的使用,测试类MemCached.java; 在此基础上增加了memcahce和spring的整合,顺便使用了ibati,测试类SpringMemcacheTest.java 代码简洁,适合研究,参考
11. **Ibatis2支持Annotation**:Ibatis是一个流行的持久层框架,报告中介绍了如何让Ibatis2支持注解,使代码更简洁,配置更直观。 12. **内存泄漏分析**:通过Java的垃圾收集(GC)日志,开发者可以分析内存泄漏问题...
NoSQL数据库如mongodb、hadoop、hive、hbase、memcached、redis等用于非结构化数据处理。 3.3 **底层开发框架**:Java服务端开发推荐使用struts2 + spring3+ ibatis(mybatis),前台WEB开发框架建议使用JS框架如...
- **数据库**:关系型数据库如Oracle、MySQL,以及NoSQL数据库如MongoDB、Hadoop、Hive、HBase、Memcached、Redis,Oracle要求10g以上版本。 - **开发框架**:Java服务端推荐Struts2+Spring3+iBatis或MyBatis,...
4. **配置MyBatis缓存**:MyBatis支持自定义缓存实现,我们需要创建一个实现了`org.apache.ibatis.cache.Cache`接口的类,这个类将负责与Redis交互,进行数据的存取。在MyBatis的配置文件中,将这个自定义缓存类注册...
3. **Spring MVC与Struts MVC**:两者都是用于构建MVC架构的应用框架,Spring MVC更现代且灵活,支持依赖注入,而Struts则相对老旧但社区支持广泛。了解它们的差异有助于选择合适的开发工具。 4. **Spring和iBatis*...
Afinal是一款轻量级的Java ORM(对象关系映射)框架,它的设计目标是简化数据库操作,让开发者能更专注于业务逻辑,而不是繁琐的数据访问层实现。Afinal借鉴了iBatis的一些优秀特性,同时也引入了自己的创新,比如...