缓存在分布式Web应用程序中 - 复杂查询用例

时间:2014-02-04 12:47:34

标签: java mysql sql spring caching

我们正在开发一个分布式Web应用程序(3个带有负载均衡器的tomcats)。

目前我们正在寻找缓存解决方案。该解决方案应该是集群安全的。 我们正在使用spring,jpa(mysql)

我们考虑了以下解决方案:

创建一个运行简单缓存的缓存服务器,并将每个tomcat的所有数据库操作委派给它。 (Web应用程序中的dao层将与该服务器通信,而不是访问DB本身)。这很有吸引力,因为缓存服务器配置上的缓存可以是最小的。

我们现在想知道的是:

如果将复杂查询传递给cacheServer(即选择多个连接和where子句),标准缓存形式(map)究竟能如何处理?这是否意味着我们必须单独为每个复杂查询实现查找并将其调整为映射搜索而不是DB?

P.S - 这种架构有可能在它的基础上存在缺陷,因此提出了一个像这样的奇怪问题,如果是这样,请提出另一种选择。

最佳,

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

如果我理解正确,您正在尝试实现方法缓存,使用DAO方法的参数作为键,并使用结果对象/列表作为值。

这应该可行,但是您对复杂查询的关注是有效的,您最终会在缓存中输入大量条目。对于复杂查询,只有在使用与缓存中的参数完全相同的参数执行相同查询时才会访问缓存。您必须弄清楚缓存这些复杂查询是否有用,如果它们有可能被命中,它实际上取决于应用程序业务逻辑。

另一个选择是使用ehcache和大内存实现具有多个级别的缓存:二级缓存和查询缓存。您可能会发现这很有用: http://ehcache.org/documentation/integrations/hibernate