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