Spring ehcache 与自填充缓存范围的集成



我必须集成 spring 和 ehcache,并尝试使用 blockingCache 模式实现它

<ehcache:annotation-driven/>

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

还有带有自填充标志的注释@Cacheable

根据我在某篇文章中读到的内容

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

它说当使用共享时,只创建一个实例,并且每次使用相同的缓存名称时都使用相同的实例,因此如果我对一种方法使用 selfPopulating 标志作为 true,

所有尝试访问其他方法的线程都用 将自填充标志设置为 true 的@Cacheable将继续保留 我不要

<ehcache:annotation-driven/>

另一方面,当自填充缓存范围 = 方法为所有注释的方法创建单独的实例时,@Cacheable 自填充标志设置为 true,因此不会产生问题。

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

由 Eric 在上面的 ehcache Google Group 上回答

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

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

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

至于阻止,如果您阅读了自填充缓存的文档和 BlockingCache你会注意到ehcache在两者之间做了一个折衷 缓存级锁定和通过密钥条带化锁定每个密钥。 http://ehcache.org/apidocs/net/sf/ehcache/constructs/blocking/BlockingCache.html

最新更新