2013-10-04 34 views
1

因此,我有一个使用Spring框架和JDBCtemplate的Java EE应用程序。而且,我的应用程序必须在同一个数据库(这是一个Postgres数据库,但由于一系列原因而未规范化),但使用不同的sql语句(不同的where子句)上执行多个JDBC数据库读取请求(无/很少写入)。所以,鉴于这种情况,我希望能够缓存数据库并能够在缓存上运行查询,从而为我节省昂贵的JDBC调用。因此,请建议适当的工具或框架或任何其他解决方案。使用Spring进行数据库缓存并能够查询它

回答

0

您可以从使用简单的地图开始,具体取决于您正在使用的查询参数。更可行的解决方案是使用ehcache。

+0

我在我的数据库中有几个参数,我需要一起查询,所以简单的地图是不够的。我确实看过EHCache,但并不完全确定它是否完全符合我的需求。如果有人有经验,请告诉我它是否适合我。 –

+0

很多企业使用ehcache。所以如果你有任何疑问,你是否可以安全地使用它;放心,这是非常好的。我自己成功地在更大的应用程序中使用了ehcache和ehcache web。去吧。 ehcache网站有很多您可以使用的信息。 – pravat

0

如果使用Spring 3.1或更高版本,则可以在方法上使用@Cacheable。您需要在应用程序上下文配置中包含<cache:annotation-driven />。对于简单的情况,你可以使用Spring的ConcurrentCacheFactoryBean作为缓存管理器。对于更复杂的情况,您可以通过spring的ehcache适配器使用ehcache。使用@CacheEvict来重置缓存。

+0

我不是100%确定,但它看起来像@Cacheable是用于缓存方法返回,即如果方法被调用相同的参数,那么它是有道理的,所以返回相同的早期缓存结果。但在我的情况下,我不希望我的DAO函数被调用相同的参数,事实上,他们很可能会每次调用不同的不同参数(导致不同的sql查询需要被触发),因此缓存方法没有意义。 –

+0

我认为数据库缓存很有意义,因此如果系统能够在此缓存数据库上使用不同的查询语句进行查询,则应用程序的性能会得到改善。 –

+0

如果对@ someMethod(String someArg)使用@Cacheable,someArg值将成为缓存中的键。它不需要每次都有相同的参数。如果您传递了之前传递的参数,方法将从缓存中返回值。 – androberz