首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在使用com.jcabi.aspects的@Cacheable注释时从缓存中清除特定数据?

如何在使用com.jcabi.aspects的@Cacheable注释时从缓存中清除特定数据?
EN

Stack Overflow用户
提问于 2017-01-24 07:04:09
回答 1查看 587关注 0票数 3

在我的项目中,我使用com.jcabi.aspectscom.jcabi.aspects注释来缓存机制,在这个场景中,我需要从缓存中刷新特定的数据,而不是刷新整个缓存。这怎么可能呢?

例如,

代码语言:javascript
复制
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使用的类雇员,那么如果将一个新员工添加到Org1中,那么只应该从缓存中刷新be 1的数据,并且应该将Org2 2的数据保留在缓存中。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-27 09:27:54

jcabi-方面是不可能的。我认为你的设计应该改进,这样才有可能。目前,类Employees并不是真正的适当对象,而是过程的集合( 效用类)。这就是为什么不能正确地进行缓存。相反,您需要一个新的类/装饰器MySqlOrganization

代码语言:javascript
复制
class MySqlOrganization {
  private final Organization;
  @Cacheable
  public int size() {
    // count in MySQL
  }
  @Cacheable.FlushBefore
  public void add(Employee emp) {
    // save it to MySQL
  }
} 

看到正确的OOP的好处了吗?:)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41821981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档