Guava Cacheの作成

3642 ワード

guavaは、Googleのいくつかのjavaコアクラスライブラリの集合であり、集合、キャッシュ、オリジナルタイプ、同時、共通注釈、基本文字列操作、I/Oなどが含まれています.
 
この記事では、主にキャッシュ部分の使い方を説明します.この文章は主にwikiの内容と結びつけて勉強した小さな結末です.
 
Wikiのアドレスは次のとおりですが、fan qiangアクセスが必要です.https://code.google.com/p/guava-libraries/wiki/CachesExplained
 
基本的には2つの方法でcacheを作成できます.
 
cacheLoader
 
callable callback
 
この2つの方法で作成されたcacheは、通常mapでキャッシュされる方法と比較して、キャッシュからkey Xの値を取り、キャッシュされた場合はキャッシュ内の値を返し、キャッシュされていない場合は、ある方法でこの値を取得する論理を実現しています.
 
しかし,cacheloaderの定義は比較的広く,cache全体に対して定義されており,key値load valueに基づいて統一された方法と考えられる.
 
callableの方式は柔軟で、getの時に指定することができます.
 
次の2つの方法の例を示します.
 
まずcacheloaderに基づく方法
 
    @Test
    public void testCacheBuilder() throws ExecutionException {

        LoadingCache<String, String> graphs = CacheBuilder.newBuilder().maximumSize(1000)
                .build(new CacheLoader<String, String>() {
                    public String load(String key) {
                        //  key , key properties 
                        ApplicationContext context = new FileSystemXmlApplicationContext("E:/WorkDir/struts2practice/GuavaTest/WebRoot/WEB-INF/xml/springConfig.xml");
                        JdbcCustomerDAO aJdbcCustomerDAO = context.getBean(JdbcCustomerDAO.class);

                        System.out.println("load method has been invoked");
                        return aJdbcCustomerDAO.findValue(key);
                    }
                });

        String resultVal = graphs.get("testKey");
        System.out.println("first time value is: " + resultVal);

        String resultVal1 = graphs.get("testKey");
        System.out.println("second time values is: " + resultVal1);

    }

次に、callableを実装する方法に基づいています.
@Test
    public void testCallable() throws ExecutionException {
        //  CacheLoader
        Cache<String, String> cache = CacheBuilder.newBuilder().maximumSize(1000).build();

        String resultVal = cache.get("testKey", new Callable<String>() {
            public String call() {
                //  key , key properties 
                ApplicationContext context = new FileSystemXmlApplicationContext("E:/WorkDir/struts2practice/GuavaTest/WebRoot/WEB-INF/xml/springConfig.xml");
                JdbcCustomerDAO aJdbcCustomerDAO = context.getBean(JdbcCustomerDAO.class);

                System.out.println("resultVal call method is invoked");
                return aJdbcCustomerDAO.findValue("testKey");
            }
        });
        System.out.println("first time value is: " + resultVal);

        String resultVal1 = cache.get("testKey", new Callable<String>() {
            public String call() {
                //  key , key properties 
                ApplicationContext context = new FileSystemXmlApplicationContext("E:/WorkDir/struts2practice/GuavaTest/WebRoot/WEB-INF/xml/springConfig.xml");
                JdbcCustomerDAO aJdbcCustomerDAO = context.getBean(JdbcCustomerDAO.class);

                System.out.println("resultVal1 call method is invoked");
                return aJdbcCustomerDAO.findValue("testKey");
            }
        });
        System.out.println("second time values is: " + resultVal1);
    }