1

我正在使用使用 EHcache 的 playframework 2。现在api只有一个Cache.setCache.get所以我认为有一个大缓存。

如果有多个缓存不是更有效吗?例如,一个缓存用于 IP 地址,一个缓存用于用户名等。

你能给我一些优点/缺点吗?

4

2 回答 2

3

考虑最一般意义上的缓存。通常允许缓存增长到某个大小限制,然后根据上次访问的时间从缓存中删除项目。

因此,假设您要缓存苹果和梨,并且您有足够的空间在缓存中保存 20 个项目。如果你把它分成一个缓存苹果和另一个缓存梨,它似乎很好地分割了。但是,如果您的客户使用了很多苹果但几乎没有梨,您最终会很快将苹果缓存装满,因此最近使用过的苹果将从苹果缓存中删除,而没有使用过的梨长时间使用可以留在梨缓存中,因为它没有满。

您可以看到,如果您只有一个可以存储苹果或梨的缓存,那么您将缓存最近使用的对象,因此总体上可能会更有效率。因此,从性能的角度来看,您通常最好使用尽可能少的缓存。

于 2016-08-02T11:24:54.033 回答
2

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);

    }


}
于 2012-08-17T17:21:50.437 回答