当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在使用com.jcabi.aspects的@Cacheable注释时从缓存中刷新特定数据?》经验,为你挑选了1个好方法。

我在我的项目中使用缓存机制的@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



1> yegor256..:

使用jcabi方面是不可能的.而且我相信你的设计应该得到改进,以使其成为可能.目前你的类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的好处?:)

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有