gpt4 book ai didi

java - Spring @Cacheable 除非由自定义 key 生成器创建的属性引用 key

转载 作者:行者123 更新时间:2023-12-02 02:39:15 27 4
gpt4 key购买 nike

我有以下 getLoggedInCustomer 服务,该服务速度很慢,并且使用自定义 key 生成器(使用 JWT token 中的多个字段)进行缓存

新的要求(用于监控)是我们不想缓存一些客户。例如,我们不想缓存生成的缓存键为 123

的客户

实现此目的的唯一方法是将生成的缓存键包含到结果中,并在 @Cacheableunless 字段中引用它,如下所示:

@CacheConfig(keyGenerator = "CustomKeyGenerator")
class CustomerService {


@Cacheable(value = "customers", unless="#result.key.equals(\"123\")")
public Customer getLoggedInCustomer() {
return repository.getLoggedInCustomer; // slow
}
}

想知道是否可以在不将生成的缓存键包含到结果对象中的情况下执行此操作?

最佳答案

@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;
}
}

更多详细信息请参见:

https://zoltanaltfatter.com/2019/07/24/conditional-caching/

关于java - Spring @Cacheable 除非由自定义 key 生成器创建的属性引用 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57189464/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com