1

我是使用 Google Guava 缓存的新手,但遇到了一些问题。请看下面的代码,它很简单。以下是我的问题和代码。1. 每当我testGuavaCache("6048698068");从另一个类调用方法时 - 它总是每次都运行方法 - generateDataFromDAO();。不应该只调用一次此方法,因为当它不存在于内存中时它会第一次缓存,下一次它将从内存中提供服务。感谢您的早日回复。

public class GuavaCach{
    private static Logger objLogger = Logger.getLogger(WordToPDF.class);    
    LoadingCache<String, String> guavaCache = CacheBuilder.newBuilder()
        .maximumSize(10000)
        .build(
            new CacheLoader<String, String>() {
            public String load(String key) throws Exception {   
                objLogger.debug("-----KEY IN LOAD BEFORE calling generateDataFromDAO------->" + key + "<-------");
                String out =  generateDataFromDAO();
                objLogger.debug("-----out after calling generateDataFromDAO------->" + out + "<-------");
                return out;
            }
    });

    public String testGuavaCache(String key) throws IOException {
        String dataFromDAO = null;
        objLogger.debug("-----Entering testGuavaCache-----");
        try {
            dataFromDAO = guavaCache.get(key);
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        return dataFromDAO; 
    }         

    public String generateDataFromDAO() throws PreviewErrorMsg, IOException {
        objLogger.debug("-----Entering generateDataFromDAO-----");
        String data = "GeneratedDataFromDAO";       
        return data;
    }
}

在另一个班级 - 我在上面打电话:

GuavaCach gCache = new GuavaCach(); gCache..testGuavaCache("6048698068");

4

1 回答 1

5

每次您提出问题时,您都会创建一个全新的缓存,而(空)新缓存中没有任何答案。您需要创建一个缓存,保留它,并一遍又一遍地问它同样的问题以获得好处。你没有发布太多你如何使用它,但你应该只调用new GuavaCach()你的其他代码,然后g.testGuavaCache(key)重复调用。

于 2013-08-02T15:48:59.173 回答