Spring Cache,我该如何设计缓存和密钥?

时间:2016-05-29 13:24:49

标签: java spring caching

我是Spring Cache的新手,并使用Ehcache作为Spring Cache实现 我想知道以下模式:哪个更好,为什么?

模式1:许多不同的类使用相同的缓存,具有不同的密钥前缀。

@Cacheable(cacheNames = "myCache", key = "'user:'+#id")
public User findOne(int id) {
    return...
}

@Cacheable(cacheNames = "myCache", key = "'post:'+#id")
public Post findOne(int id) {
    return...
}

模式2:每个类都有自己的缓存。

@Cacheable(cacheNames = "users", key = "#id")
public User findOne(int id) {
    return...
}
@Cacheable(cacheNames = "posts", key = "#id")
public Post findOne(int id) {
    return...
}

使用模式2,我必须在我的ehcache.xml中配置许多<cache/> 我不知道Cache是​​否是一个重量级组件? 是否创建了许多对性能有害的缓存?

1 个答案:

答案 0 :(得分:0)

第二种解决方案看起来更有效,可追溯,而且不易出错。

在某些数据库中,为不同的表生成的ID可能冲突。因此,对于第一个解决方案,如果其中一个帖子与其中一个用户具有相同的ID,则可能会出现问题。在这个版本中,您不像第一个解决方案那样需要解决方法。

其次,您可能希望为不同类型的对象设置不同的属性。例如; timeToLiveSeconds。用户信息可能比帖子更频繁地更改。 (例如用户的条目数等)

第三,maxEntriesLocalHeap。保持堆中不同类型的最新对象看起来是更好的选择。