Java Guava 11:缓存无法使用5分钟刷新

Java Guava 11:缓存无法使用5分钟刷新,java,caching,guava,Java,Caching,Guava,我们在每30秒运行一次的心跳线程中有下面的方法,我们为ClientsDAO.GetClient引入了5分钟刷新的Guava缓存,如下所示,这样我们就不会每30秒访问一次数据库 private List<String> getClients() { final Supplier<List<String>> supplier = () -> ClientsDAO.getClients(); if(Server.CACHE_R

我们在每30秒运行一次的心跳线程中有下面的方法,我们为ClientsDAO.GetClient引入了5分钟刷新的Guava缓存,如下所示,这样我们就不会每30秒访问一次数据库

private List<String> getClients() {
        final Supplier<List<String>> supplier = () ->  ClientsDAO.getClients();
        if(Server.CACHE_REFRESH_DURATION <=0)
            return supplier.get();
        else{
        LOG.debug("Fetching Clients from cache, duration = "+Server.CACHE_REFRESH_DURATION+". timeunit = "+Server.CACHE_REFRESH_TIMEUNIT);  
        return Suppliers.memoizeWithExpiration(supplier, Server.CACHE_REFRESH_DURATION, Server.CACHE_REFRESH_TIMEUNIT).get();
        }       
    }
你永远不会重复使用供应商。记住消费,所以它总是一个新的电话 每次调用时都要创建一个新的备忘供应商,因此基本上每次都要进行一次新调用,因为新的备忘供应商为空,因此会传播调用以填充自身。您应该只创建一次备忘录供应商,并像这样重复调用它:

private final Supplier<List<Client>> getClientsSupplier = Suppliers.memoizeWithExpiration(ClientsDao::getClients, Server.CACHE_REFRESH_DURATION, Server.CACHE_REFRESH_TIMEUNIT);

public List<Client> getClients() {
  return getClientsSupplier.get();
}
你永远不会重复使用供应商。记住消费,所以它总是一个新的电话 每次调用时都要创建一个新的备忘供应商,因此基本上每次都要进行一次新调用,因为新的备忘供应商为空,因此会传播调用以填充自身。您应该只创建一次备忘录供应商,并像这样重复调用它:

private final Supplier<List<Client>> getClientsSupplier = Suppliers.memoizeWithExpiration(ClientsDao::getClients, Server.CACHE_REFRESH_DURATION, Server.CACHE_REFRESH_TIMEUNIT);

public List<Client> getClients() {
  return getClientsSupplier.get();
}

你真的还在使用Guava 11吗?@Marged这是一个旧的应用程序,多年后我们正在做一些更改,你推荐哪个版本?27.1-jre?您每次都会返回一个新的记忆供应商实例,不是吗?有适合您其他家属的版本吗?您真的还在使用Guava 11吗?@Marged这是一个旧应用程序,多年后我们正在进行一些更改,您推荐哪个版本?27.1-jre?您每次都会返回一个新的memonizing Supplier实例,是吗?有适合其他依赖项的版本吗