gpt4 book ai didi

java - Spring @CacheEvict 使用通配符

转载 作者:IT老高 更新时间:2023-10-28 13:57:49 30 4
gpt4 key购买 nike

有没有办法在@CacheEvict 中使用通配符?

我有一个 Multi-Tenancy 应用程序,有时需要从租户的缓存中逐出所有数据,但不是系统中所有租户的数据。

考虑以下方法:

@Cacheable(value="users", key="T(Security).getTenant() + #user.key")
public List<User> getUsers(User user) {
...
}

所以,我想做这样的事情:

@CacheEvict(value="users", key="T(Security).getTenant() + *")
public void deleteOrganization(Organization organization) {
...
}

还有办法吗?

最佳答案

答案是:没有。

要实现你想要的也不是一件容易的事。

  1. Spring Cache 注解必须简单,便于缓存提供者实现。
  2. 高效缓存必须简单。有一个关键和值(value)。如果在缓存中找到键,则使用该值,否则计算值并放入缓存。高效的 key 必须有快速诚实的 equals()hashcode()。假设您从一个租户缓存了许多对(键、值)。为了提高效率,不同的键应该有不同的 hashcode()。你决定驱逐整个租户。在缓存中找到租户元素并不容易。您必须迭代所有缓存对并丢弃属于租户的对。它效率不高。它不是原子的,所以它很复杂,需要一些同步。同步效率不高。

所以没有。

但是,如果您找到解决方案,请告诉我,因为您想要的功能真的很有用。

关于java - Spring @CacheEvict 使用通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17749049/

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