【问题标题】:Spring MVC - Ehcache best practicesSpring MVC - Ehcache 最佳实践
【发布时间】:2015-04-19 04:42:37
【问题描述】:

我有一个关于使用 spring 和 ehCache 的最佳实践的问题。

例如,如果我有两个使用 @Cacheable 注释的方法使用相同的参数值,那么 ehcache 将返回最新的缓存值。

@Cacheable(value="imagesCache",key="#id_image")
public Image getUserImage(id_image){ //stuff }

//and 

@Cacheable(value="imagesCache",key="#id_image")
public Image getProductImage(id_image){ //stuff }

如果我先调用 getUserImage(10),然后调用 getProductImage(10),ehcache 将为这两种方法返回相同的值,因为它们具有相同的键。 我认为 ehcache,使用 key 和方法名称 索引缓存值,因此如果两个方法具有相同的 #key(在我的示例中为 10),它将查看方法名称。

我知道最简单的解决方案是创建两个缓存(“userImagesCache”和“productImagesCache”),但在这种情况下我想避免这种情况。

如何解决?

谢谢。

【问题讨论】:

  • 为什么不想要两个单独的缓存?用户和产品看起来像是不同的集合。
  • 因为最后我会得到几十个缓存。用户可以拥有图像、地址、电话,其中一些可能具有相同的密钥...
  • 在这一切之下,Spring其实是在使用AOP来拦截方法调用,创建缓存key,缓存方法响应。您可以自己使用 spring 配置而不是注释来完成所有这些。然后你可以实现你自己的“拦截器”,它会创建你自己设计的密钥。虽然@retoq 似乎在这里提供了正确的答案。

标签: java spring ehcache


【解决方案1】:

根据@Cacheable javadoc key 是一个SpEL表达式,所以你可能会这样:

@Cacheable(value="imagesCache",key="'user' + #id_image")
public Image getUserImage(id_image){ //stuff }

//and 

@Cacheable(value="imagesCache",key="'product' + #id_image")
public Image getProductImage(id_image){ //stuff }

【讨论】:

  • 听起来不错,让我测试一下,然后我会接受你的回答。谢谢
猜你喜欢
  • 2015-09-11
  • 2022-11-17
  • 2011-05-18
  • 2017-01-13
  • 1970-01-01
  • 2011-02-04
  • 2014-06-26
  • 2011-05-05
  • 1970-01-01
相关资源
最近更新 更多