java - 如何在同一个 ehCache 中缓存 2 个不同的 bean 方法?

标签 java spring caching ehcache spring-cache

假设我有 2 个不同的 bean 方法,我想通过 EhCache 缓存它们:

@Component
public class StatService {

@Cacheable(value = "statCalc")
public int getMeth1(int param) {
    // LOGIC1
}

@Cacheable(value = "statCalc")
public int getMeth2(int param) {
    // LOGIC2
}
}

我想将它们驻留在同一个缓存中 - ehcache.xml:

<cache name="statCalc"
       ...
/>

问题是缓存键是由输入参数生成的,而不是由方法签名生成的,因此getMeth2(1)可以返回由getMeth1(1)缓存的值。

使用方法名构建 key 的最简单方法是什么?

附言请不要提及为不同的方法使用相同的缓存可能是错误的事实,只是帮助解决这个问题。

最佳答案

Spring Cache 抽象允许您使用 SpeL 来指定缓存键。例如,您可以使用方法名称、参数值等。

例如

@Component
public class StatService {

   @Cacheable(value="statCalc",key="#root.method.name.concat(':').concat(#param)")
   public int getMeth1(int param) {
      // LOGIC1
   }

   @Cacheable(value="statCalc",key="#root.method.name.concat(':').concat(#param)")
   public int getMeth2(int param) {
   // LOGIC2
   }
}

对于方法调用 getMeth1(5),键将为 getMethod1:5 对于方法调用 getMethod1(0),键将为 getMethod1:0

对于方法调用 getMeth2(3), key 将为 getMethod2:3。这允许您缓存不同参数的结果

关于java - 如何在同一个 ehCache 中缓存 2 个不同的 bean 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36741090/

相关文章:

java - 在 Eclipse 中导入类/java 文件

java - 我怎样才能在java中处理声音?

java - 14 :08:31. 741 [主要]调试org.springframework.web.client.RestTemplate - 响应415 UNSUPPORTED_MEDIA_TYPE

apache - 如何使用apache设置静态资源缓存?

java - 如何使用 VisualVM 获取每个函数的时间成本

java - 多个监听器的 KafkaListener ConsumerConfig AUTO_OFFSET_RESET_DOC 最早

java - 无法调用 LogoutSuccessHandler - Spring Security

asp.net - ASP.NET(WebForms 或 MVC)应用程序中的哪个代码组件服务于图像等网站资源?

java - 如何实现具有条目自动过期功能的CacheMap?

java - java中数组的种类