2012-08-17 97 views
1

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

如果有多个缓存,效率会不会更高?检查一个缓存的IP地址,一个缓存用户名等。

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

回答

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

    } 


} 
+0

是的我已经做了类似的方法。但让我们说我们的缓存有1000个条目。我们尝试查找特定的用户。如果用户不在缓存中,我们将得到1000次未命中。如果我们只有用户的特定缓存,那么缓存将比例如100个条目小得多 - >性能更好。或者我错了? – 2012-08-17 17:55:17

+0

对于这种类型的数字,差异很小(访问内存中的散列表)。 – 2012-08-17 19:39:49

0

在最一般的意义上考虑缓存。通常情况下,缓存允许增长到一定的大小限制,然后在最后一次访问的基础上从缓存中删除项目。

因此,假设您想缓存苹果和梨,并且您有足够的空间来保存缓存中的20个项目。如果你把它分成一个苹果缓存和另一个梨缓存,它看起来很好的分割。然而,如果你的客户使用了大量的苹果,但几乎没有梨,那么最终苹果缓存将会很快满载,所以最近使用的苹果将从苹果缓存中移除,而没有使用的梨长时间使用可以留在梨缓存中,因为它没有满。

你可以看到,如果你只有一个缓存可以存储苹果或梨,那么你正在缓存最近使用的对象,因此整体效率可能更高。所以从性能的角度来看,你通常更好的是尽可能少的缓存。