Java 当所有数据库访问都通过JPA执行时,有什么理由禁用缓存吗?

Java 当所有数据库访问都通过JPA执行时,有什么理由禁用缓存吗?,java,caching,jpa,eclipselink,Java,Caching,Jpa,Eclipselink,我正在使用由EclipseLink 2.5.2实现的JPA2.1 我想通过使用@Cacheable缓存@Entity来提高性能 我的代码是访问数据库的唯一代码 我的所有代码的数据库访问都是通过JPA调用执行的 我的代码在启用JPA JMS缓存协调的多个GlassFish 4.1实例上运行 只要我同意服务器可能会在极短的时间内使用缓存中的旧数据,而更新需要通过缓存协调进行传播,那么有什么理由禁用JPA实体的缓存吗 我还想使用eclipselink.query results cache来缓存查询结

我正在使用由EclipseLink 2.5.2实现的JPA2.1

我想通过使用
@Cacheable
缓存
@Entity
来提高性能

我的代码是访问数据库的唯一代码

我的所有代码的数据库访问都是通过JPA调用执行的

我的代码在启用JPA JMS缓存协调的多个GlassFish 4.1实例上运行

只要我同意服务器可能会在极短的时间内使用缓存中的旧数据,而更新需要通过缓存协调进行传播,那么有什么理由禁用JPA实体的缓存吗

我还想使用eclipselink.query results cache来缓存查询结果。在这种情况下,是否有任何理由禁用这种缓存


谢谢。

我相当肯定EclipseLink默认启用二级缓存,因此添加
@Cacheable
不会显示性能改进。

在维护缓存时存在开销,在一定的读写比下,使用缓存进行读操作会对性能造成更大的影响。大多数情况下都建议使用缓存,但只有性能指标才能真正告诉您使用缓存的得失,以及您的应用程序是否有效地使用缓存。如果你的应用程序能够容忍偶尔出现的陈旧数据,那么缓存对于读取大部分数据来说是一个很大的帮助。没错,Rick-我想补充一点,使用eclipselink.query-results-cache将为你提供陈旧数据,因为在进行事务性更新时,它不会像对象缓存那样刷新(您需要根据应用程序的需要选择失效参数)。有关详细信息,请阅读此处: