我正在使用@Cacheable
com.jcabi.aspects
注释作为项目中的缓存机制,并且我有一个场景,我需要从缓存中刷新特定数据而不是刷新整个缓存。怎么可能?
例如
import com.jcabi.aspects.Cacheable;
public class Employees {
@Cacheable(lifetime = 1, unit = TimeUnit.HOURS)
static int size(Organization org) {
// calculate their amount in MySQL
}
@Cacheable.FlushBefore
static void add(Employee employee, Organization org) {
// add a new one to MySQL
}
}
如果我有一个由两个组织 Org1 和 Org2 使用的类 Employees ,现在如果将新员工添加到 Org1,则只应从缓存中刷新 Org1 的数据,并且 Org2 的数据应保留在缓存中。
参考 com.jcabi.aspects.Cacheable @Cacheable : http://www.yegor256.com/2014/08/03/cacheable-java-annotation.html
这是不可能的。我相信你的设计应该得到改进,以便使之成为可能。目前,您的类Employees
实际上不是一个适当的对象,而是一个过程集合(一个实用程序类)。这就是为什么缓存不能正确完成的原因。相反,您需要一个新的类/装饰器MySqlOrganization
:
class MySqlOrganization {
private final Organization;
@Cacheable
public int size() {
// count in MySQL
}
@Cacheable.FlushBefore
public void add(Employee emp) {
// save it to MySQL
}
}
现在看到适当的 OOP 的好处了吗?:)