3

我必须整合spring和ehcache,并尝试用blockingCache模式来实现它

<ehcache:annotation-driven/>

共享(默认)和方法自填充缓存范围有一个选项。你能解释一下有什么区别吗?

还有带有selfPopulating标志的注释@Cacheable

根据我在一些帖子上读到的

http://groups.google.com/group/ehcache-spring-annotations/browse_thread/thread/7dbc71ce34f6ee19/b057610167dfb815?lnk=raot

它说当使用shared只创建一个实例,并且每次使用相同的缓存名称时都使用相同的实例,所以如果我将selfPopulating标志用作一种方法,

所有试图访问使用 @Cacheable 注释且 selfPopulating 标志设置为 true的其他方法的所有线程都将暂停,这是我不想要的

<ehcache:annotation-driven/>

另一方面,当self-populating-cache-scope = method为所有使用 @Cacheable 注释的方法创建单独的实例时,selfPopulating 标志设置为 true,因此不会产生问题。

但是在这种情况下,当我尝试使用@TriggerRemove删除一个元素并给出 @Cacheable 中使用的缓存名称时,它会在每个单独的实例中搜索以找到该值吗?这不是开销吗?

4

1 回答 1

1

由 Eric 在上面的 ehcache google 组中回答

在所有情况下,都有一个底层 Ehcache 实例。当您设置 selfPopulating=true 时会发生什么是创建了一个 SelfPopulatingCache 包装器。

如果 cache-scope=shared 则所有使用该命名缓存的注解将使用相同的 SelfPopulatingCache 包装器 如果 cache-scope=method 则每个方法创建一个包装器

请注意,在这两种情况下,SelfPopulatingCache 都是包装器,仍然只有一个实际缓存支持包装器

至于阻塞,如果您阅读 SelfPopulatingCache 和 BlockingCache 的文档,您会注意到 ehcache 通过密钥条带化在缓存级别锁定和每个密钥锁定之间做出折衷。 http://ehcache.org/apidocs/net/sf/ehcache/constructs/blocking/BlockingCache.html

于 2012-04-12T19:13:23.517 回答