我有以下getLoggedInCustomer
服务,该服务很慢,并且正在通过自定义密钥生成器使用缓存(该缓存使用了JWT令牌中的多个字段)
(用于监视)的新要求是我们不想缓存一些客户。例如,我们不想在生成的缓存密钥为123
我能做到这一点的唯一方法是将生成的缓存键包含到结果中,并在unless
的{{1}}字段中引用它,如下所示:
@Cacheable
是否有可能在不将生成的缓存键包含到结果对象中的情况下做到这一点?
答案 0 :(得分:0)
@Service
@Log4j2
@CacheConfig(keyGenerator = "customKeyGenerator")
class CustomerService {
@Cacheable(value = "customers", unless = "@monitoring.monitoringUser()")
public Customer getLoggedInCustomer() {
return repository.getLoggedInCustomer; // slow
}
}
monitoringUser
的来源
@Component(value = "monitoring")
@Log4j2
class Monitoring {
@Value("${caching.disable.users:#{T(java.util.Collections).emptyList()}}")
private List<String> users;
public boolean monitoringUser() {
String name = SecurityContextHolder.getContext().getAuthentication().getName();
// do not cache
if (users.contains(name)) return true;
return false;
}
}
此处有更多详细信息: