首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Apache iBatis中注入memcached是可能的吗?

在Apache iBatis中注入memcached是可能的吗?
EN

Stack Overflow用户
提问于 2009-05-07 16:54:22
回答 2查看 931关注 0票数 2

我一直在做一个使用分布式应用程序的复杂项目,它需要缓存SQL查询:因为我一直在使用iBatis框架,所以我想使用memcached - sysadmin请求它-作为缓存引擎。有可能吗?如果是,是否有人知道现有的解决方案/实现?我已经知道OSCACHE在集群中也可以工作,但在切换到新的架构之前,我想知道是否可以使用现有的架构。非常感谢!

EN

回答 2

Stack Overflow用户

发布于 2009-06-01 04:25:44

有趣的问题!

iBatis返回一个或多个JavaBeans,后者可能包含嵌套的JavaBeans列表。Serializable就是一个遵循某些简单conventions的JavaBean对象,其中之一就是它实现了Serializable接口。如果是这样的话,您可以将JavaBean结构serialize为字符串,然后将该字符串反序列化为原始JavaBean结构的深层副本。

因此,假设您确保所有的result对象都被声明为“实现Serializable”。JavaBeans具有如此简单的结构,不需要覆盖默认的Java对象序列化/反序列化机制,这很好。

这些序列化的字符串是您放入memcached集群的分布式散列映射中的值。在运行查询并返回其结果的每个方法中,首先在memcached中查找现有结果,如果它在memcached中且尚未过期,则将其反序列化为(假设)查询将返回的JavaBeans。如果在memcached中没有找到查询结果,那么可以通过iBatis查询数据库,但是在返回结果之前,需要将其序列化为一个字符串,并将该值存储在memcached中。

下一个问题是使用什么作为memcached查询结果键。就像这样

代码语言:javascript
复制
YourIbatisQueryName + ":" + FirstParameterValue + ":" + SecondParameterValue

应该起作用(例如,"SelectStackOverflowReputation:Simone:Tripodi").

你就快完成了。最后一步是确定查询结果可以缓存多长时间而不会变得无效。也许您可以为每个查询建立不同的过期时间,或者您可能需要一种手动缓存无效机制。即使只缓存几分钟的查询结果,也会对应用程序的可伸缩性产生非常大的影响。

注意:这种方法的一个变体是不使用缺省的Java序列化,而是使用XML、JSON或其他一些格式。如果您选择XML或JSON,那么可以研究像XStream这样的序列化框架,将JavaBeans序列化/反序列化成XML字符串,然后再反序列化。

票数 1
EN

Stack Overflow用户

发布于 2010-01-21 16:08:10

扩展全局,但别名使用add cacheController

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/835849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档