Java 使用Spring缓存数据库并能够查询它

Java 使用Spring缓存数据库并能够查询它,java,spring,caching,jdbc,jdbctemplate,Java,Spring,Caching,Jdbc,Jdbctemplate,因此,我有一个使用Spring框架和JDBCtemplate的JavaEE应用程序。而且,我的应用程序必须在同一个数据库(Postgres DB)上执行多个JDBC数据库读取请求无/很少写入,但由于各种原因没有规范化,而是使用不同的sql语句和不同的where子句。因此,在这种情况下,我希望能够缓存数据库并能够在缓存上运行查询,从而节省昂贵的JDBC调用。因此,请建议适当的工具或框架或任何其他解决方案。您可以从使用简单映射开始,具体取决于您使用的查询参数。一个更可行的解决方案是使用ehcache

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

您可以从使用简单映射开始,具体取决于您使用的查询参数。一个更可行的解决方案是使用ehcache

如果使用Spring3.1或更高版本,则可以在方法上使用@Cacheable。您需要在应用程序上下文配置中包括。对于简单的情况,您可以使用spring的ConcurrentCacheFactoryBean作为缓存管理器。对于更复杂的情况,可以通过spring的ehcache适配器使用ehcache。使用@cacheexecute重置缓存

我不是100%确定,但似乎@Cacheable用于方法返回的缓存,即如果使用相同的参数调用该方法,那么它是有意义的,因此返回相同的早期缓存结果。但在我的例子中,我不希望用相同的参数调用我的DAO函数,事实上,每次调用它们时,很可能会使用不同的参数,从而导致需要触发不同的sql查询,因此方法的缓存是没有意义的。我认为数据库的缓存是有意义的,因此,如果有一个系统能够使用不同的查询语句对该缓存进行查询如果使用@Cacheable for:someMethodString someArg,则someArg值将是缓存中的键。它不需要每次都使用相同的参数。若你们传递之前传递过的参数,这个方法将从缓存中返回值。是的,若我传入完全相同的参数,那个么只有我从缓存中得到快速检索的好处。但是,在我的应用程序中,论点永远不会相同。所以,我想缓存整个数据库,并在缓存版本上运行不同的查询。我的数据库中有几个参数需要一起查询,所以简单的映射是不够的。我确实看过EHCache,但不确定它是否完全符合我的需要。如果有人有这方面的经验,那么请告诉我这是否是适合我的工具。很多企业都使用ehcache。因此,如果你有任何疑问,你是否可以安全地使用它;放心吧,非常好。我自己在更大的应用程序中成功地使用了ehcache和ehcache-web。去争取吧ehcache网站上有很多你可以使用的信息。