我是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是否是一个重量级组件?
是否创建了许多对性能有害的缓存?
答案 0 :(得分:0)
第二种解决方案看起来更有效,可追溯,而且不易出错。
在某些数据库中,为不同的表生成的ID可能冲突。因此,对于第一个解决方案,如果其中一个帖子与其中一个用户具有相同的ID,则可能会出现问题。在这个版本中,您不像第一个解决方案那样需要解决方法。
其次,您可能希望为不同类型的对象设置不同的属性。例如; timeToLiveSeconds
。用户信息可能比帖子更频繁地更改。 (例如用户的条目数等)
第三,maxEntriesLocalHeap
。保持堆中不同类型的最新对象看起来是更好的选择。