是否有可能在ApacheIbatis中注入memcached?

是否有可能在ApacheIbatis中注入memcached?,memcached,ibatis,Memcached,Ibatis,我一直在使用一个需要缓存SQL查询的分布式应用程序处理一个复杂的项目:因为我一直在使用iBatis框架,所以我想使用memcached(sysadmin需要它)作为缓存引擎。 可能吗?如果是,是否有人知道现有的解决方案/实施? 我已经知道OSCACHE在集群中也可以工作,但在切换到新的架构之前,我想知道是否可以使用现有的架构。 非常感谢 有趣的问题 iBatis返回一个或多个JavaBeans,这些JavaBeans可能包含JavaBeans的嵌套列表。JavaBean只是一个遵循某些简单规则的

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

有趣的问题

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

因此,假设您确保所有结果对象都声明为“实现可序列化”。JavaBeans的结构非常简单,因此不需要重写默认的Java对象序列化/反序列化机制,这很好

这些序列化字符串是您放入memcached集群的分布式哈希映射中的值。在运行查询并返回其结果的每个Java方法中,首先在memcached中查找现有结果,如果该结果存在且尚未过期,则将其反序列化到查询(可能)返回的JavaBean中。如果在memcached中找不到查询结果,则通过iBatis查询数据库,但在返回结果之前,将其序列化为字符串并将该值存储在memcached中

下一个问题是memcached查询结果键使用什么。差不多

YourIbatisQueryName + ":" + FirstParameterValue + ":" + SecondParameterValue
应该有效(例如,“SelectStackOverflowReputation:Simone:Tripodi”)

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


注意:这种方法的一个变体是不使用默认的Java序列化,而是使用XML、JSON或其他格式。如果您选择XML或JSON,请查看序列化框架,例如将JavaBean序列化/反序列化为XML字符串,然后再返回。

扩展了cacheController,但alias use add global

可以编辑您的答案,以更具体地说明所需的操作。