我正在使用使用 EHcache 的 playframework 2。现在api只有一个Cache.set
,Cache.get
所以我认为有一个大缓存。
如果有多个缓存不是更有效吗?例如,一个缓存用于 IP 地址,一个缓存用于用户名等。
你能给我一些优点/缺点吗?
我正在使用使用 EHcache 的 playframework 2。现在api只有一个Cache.set
,Cache.get
所以我认为有一个大缓存。
如果有多个缓存不是更有效吗?例如,一个缓存用于 IP 地址,一个缓存用于用户名等。
你能给我一些优点/缺点吗?
考虑最一般意义上的缓存。通常允许缓存增长到某个大小限制,然后根据上次访问的时间从缓存中删除项目。
因此,假设您要缓存苹果和梨,并且您有足够的空间在缓存中保存 20 个项目。如果你把它分成一个缓存苹果和另一个缓存梨,它似乎很好地分割了。但是,如果您的客户使用了很多苹果但几乎没有梨,您最终会很快将苹果缓存装满,因此最近使用过的苹果将从苹果缓存中删除,而没有使用过的梨长时间使用可以留在梨缓存中,因为它没有满。
您可以看到,如果您只有一个可以存储苹果或梨的缓存,那么您将缓存最近使用的对象,因此总体上可能会更有效率。因此,从性能的角度来看,您通常最好使用尽可能少的缓存。
Play 中 Cache 对象的目的是拥有一个通用的缓存系统。
您可以通过扩展实际缓存并使用特定前缀来专门化缓存:
class UserCache {
public static final String PREFIX = "UserCache";
public static void set(String key, User value) {
Cache.set(PREFIX + key, value);
}
public static User get(String key) {
return (User)Cache.get(PREFIX + key);
}
}