Java CacheResolver和KeyGenerator之间有什么区别?何时使用它们

Java CacheResolver和KeyGenerator之间有什么区别?何时使用它们,java,spring,caching,ehcache,Java,Spring,Caching,Ehcache,我正在向web应用程序添加缓存机制。 在做了一项研究之后,我决定将Ehcache与Spring一起使用 向方法添加@Cachable注释将执行该方法一次,对于任何进一步的调用,响应将从缓存返回 问题是,我需要在运行时决定(让我们假设根据登录的用户)要使用哪个缓存 我现在需要决定是使用KeyGenerators还是cacheResolver 我寻找最佳实践,何时使用它们中的每一个,但没有找到任何好的阅读资料。我希望任何人都能澄清这些差异,详细阐述最佳实践以及应该做和不应该做的事情 密钥生成器:

我正在向web应用程序添加缓存机制。 在做了一项研究之后,我决定将
Ehcache
与Spring一起使用

向方法添加
@Cachable
注释将执行该方法一次,对于任何进一步的调用,响应将从缓存返回

问题是,我需要在运行时决定(让我们假设根据登录的用户)要使用哪个缓存

我现在需要决定是使用
KeyGenerators
还是
cacheResolver

我寻找最佳实践,何时使用它们中的每一个,但没有找到任何好的阅读资料。我希望任何人都能澄清这些差异,详细阐述最佳实践以及应该做和不应该做的事情

密钥生成器:

  @Bean
  public KeyGenerator keyGenerator() {
    return new KeyGenerator() {
      @Override
      public Object generate(Object o, Method method, String loggedInUserId) {
        StringBuilder sb = new StringBuilder();
        sb.append("cache_");
        sb.append(loggedInUserId);
        return sb;
      }
    };
缓存解析器

class loggedInUserCacheResolver implements CacheResolver {
@Override
    public Collection<? extends Cache> resolveCaches(CacheOperationInvocationContext<?> context) {
        Collection<Cache> caches = new ArrayList<>();
        // do some logic and return caches to use.
        return caches;
    }
}
类loggedInUserCacheResolver实现CacheResolver{
@凌驾

公共集合密钥生成器
仅允许您操作缓存密钥的创建。但是,所有密钥仍将属于单个缓存,即使它们不会发生任何冲突

CacheResolver
允许您使用逻辑选择要使用的
Cache

给定您的初始语句,您将需要一个用于用例的
CacheResolver


请注意,您可以将这两个注释组合起来,以拥有自定义缓存和自定义密钥定义。

密钥生成器将只允许您操作缓存密钥的创建。但是,所有密钥仍将属于单个缓存,即使它们不会发生任何冲突

CacheResolver
允许您使用逻辑选择要使用的
Cache

给定您的初始语句,您将需要一个用于用例的
CacheResolver


请注意,您可以将这两种注释组合起来,以获得自定义缓存和自定义密钥定义。

一直在想2个月内是否可以找到此解释一直在想2个月内是否可以找到此解释