gpt4 book ai didi

java - EclipseLink 中的@Cache

转载 作者:行者123 更新时间:2023-12-02 03:07:23 26 4
gpt4 key购买 nike

我想要从数据库中及时获取对象。我决定不允许缓存我的实体。通过使用此配置:

@Cache(
type = CacheType.NONE/*,
alwaysRefresh = true,
disableHits = true,
coordinationType = INVALIDATE_CHANGED_OBJECTS*/
)

但我读过the documentation here那:

public static final CacheType NONE
WARNING: Does not preserve object identity and does not cache objects.

这个警告重要吗?我可能知道 JVM 可能会错误地将对象与其真实身份相关联!是否有任何建议来实现不缓存对象的最佳配置,例如使用 alwaysRefresh

最佳答案

如果您的程序是唯一使用数据库的应用程序,则不应禁用缓存,如果有多个客户端,则禁用缓存或重新配置缓存可能是正确的。

与任何缓存策略一样,需要在速度和陈旧数据之间进行权衡。大多数 JPA 实现在 Persistence Contexts 之间共享一个(二级)缓存(PC 可以通过一级缓存),因此当您使用em.find() 如果实例已经缓存,则无需访问数据库。如果另一个客户端有权访问该数据库,并且数据库被修改,您最终可能会提供过时的数据。

如果您有集群 JPA 应用程序,并且数据库仅由您的 JPA 应用程序访问,则只要配置缓存协调,您仍然可以使用缓存。当使用缓存协调时,一个实例将通知其他实例是否更新了实体,以便其他实例可以更新其缓存,或丢弃其缓存版本。

在我构建的解决方案中,我几乎总是必须禁用缓存,因为数据库有多个客户端,并且我们从不想显示过时的数据。

关于java - EclipseLink 中的@Cache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41565202/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com