java - 如何在使用 com.jcabi.aspects 的 @Cacheable 注释时从缓存中刷新特定数据?

标签 java caching jcabi

我正在使用 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
     }
}

如果我有一个由两个组织 Org1 和 Org2 使用的 Employees 类,现在如果一个新员工被添加到 Org1,那么只有 Org1 的数据应该从缓存中刷新,而 Org2 的数据应该保留在缓存中。

com.jcabi.aspects.Cacheable @Cacheable 引用:http://www.yegor256.com/2014/08/03/cacheable-java-annotation.html

最佳答案

jcabi-aspects 是不可能的.而且我相信您的设计应该得到改进,以使其成为可能。目前你的类(class) Employees 并不是真正的 proper object ,而是一组程序(utility class)。这就是缓存不能正确完成的原因。相反,您需要一个新的类/装饰器 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 的好处了吗? :)

关于java - 如何在使用 com.jcabi.aspects 的 @Cacheable 注释时从缓存中刷新特定数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41821981/

相关文章:

java - Eclipse 调试 View 中端口的含义

.net - EntLib 缓存应用程序 block 的替代方案?

sql-server - 在 SQL Server 中使用缓存表,我疯了吗?

HTML:强制代理服务器获取页面的新副本

java - 如何使用 Java ssh JSch 和 jcabi-ssh 将密码传递给 scp

Java httpURLConnection 线程化

java - 从拨号盘调用号码返回警告 : "Call requires permission which may be rejected by user"

android - 如何设置 AspectJ 以记录 Android Studio 中的方法调用?

java - 以编程方式解决 Maven 插件中的自定义依赖项

java - 使用 Selenium 的元素的存在