二级缓存 - 对相关实体的智能驱逐

时间:2014-02-09 09:05:50

标签: spring hibernate caching ehcache

我对缓存很新,想问一个简单的问题:

想象一下,我有以下类实体:

@Entity
public class Player {

   @OneToOne
   private Secret secret;

}

现在,我们假设我正在缓存两个人(秘密和玩家)。 现在,让我说我这样做:

player.getSecret().setValue("no secrets");  // lets say this secret id == 2
playerRepository.save(player);

第二级缓存是否足够智能驱逐名为“Secret”的缓存,其中一个条目的id == 2?

二级缓存是否存在某些我应该注意的限制?它是否可以插入而不更改我的网络应用程序是什么或永远?

1 个答案:

答案 0 :(得分:0)

在这种情况下运行良好,如果您使用正确的缓存并发策略,它将确定对象何时自动失效。

关于陷阱的问题,在设置缓存时需要注意以下事项,这在您第一次看到它们时可能会令人惊讶:

  • 默认情况下,只缓存由Id加载的实体,如果要缓存查询结果,则还需要添加查询缓存。

  • 如果要将一个或多个缓存到集合中,则需要单独注释关联,因为默认情况下不会缓存关联

请参阅此博客文章,详细了解这两个缓存:Truly Understanding the Second-Level and Query Caches