如何在使用 com.jcabi.aspects 的 @Cacheable 注释时从缓存中刷新特定数据?
How to flush a particular data from cache while using @Cacheable annotation of com.jcabi.aspects?
我在我的项目中使用 com.jcabi.aspects
的 @Cacheable
注释作为缓存机制,我有一个场景需要从缓存中刷新特定数据而不是刷新整个缓存。怎么可能?
例如,
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
}
}
如果我有一个 class 员工被两个组织 Org1 和 Org2 使用,现在如果一个新员工被添加到 Org1,那么只有 Org1 的数据应该从缓存中刷新而 Org2 的数据应该保留在缓存中。
com.jcabi.aspects.Cacheable @Cacheable 参考:http://www.yegor256.com/2014/08/03/cacheable-java-annotation.html
jcabi-aspects. And I believe that your design should be improved, in order to make it possible. At the moment your class Employees
is not really a proper object, but a collection of procedures (a utility class 不可能。这就是缓存不能正确完成的原因。相反,您需要一个新的 class/decorator 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 的好处了吗? :)
我在我的项目中使用 com.jcabi.aspects
的 @Cacheable
注释作为缓存机制,我有一个场景需要从缓存中刷新特定数据而不是刷新整个缓存。怎么可能?
例如,
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
}
}
如果我有一个 class 员工被两个组织 Org1 和 Org2 使用,现在如果一个新员工被添加到 Org1,那么只有 Org1 的数据应该从缓存中刷新而 Org2 的数据应该保留在缓存中。
com.jcabi.aspects.Cacheable @Cacheable 参考:http://www.yegor256.com/2014/08/03/cacheable-java-annotation.html
jcabi-aspects. And I believe that your design should be improved, in order to make it possible. At the moment your class Employees
is not really a proper object, but a collection of procedures (a utility class 不可能。这就是缓存不能正确完成的原因。相反,您需要一个新的 class/decorator 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 的好处了吗? :)