1. 程式人生 > >Google guava cache使用樣例

Google guava cache使用樣例

package com.enniu.vdata.portal;

import java.util.ArrayList;

import java.util.List;

import java.util.Map;

import java.util.concurrent.ExecutionException;

import java.util.concurrent.TimeUnit;

import org.springframework.beans.factory.annotation.Autowired;

import com.enniu.vdata.biz.monitor.dama.DamaSearchBizImpl;

import com.enniu.vdata.common.mongodb.dama.DamaSearchCond;

import com.google.common.cache.CacheBuilder;

import com.google.common.cache.CacheLoader;

import com.google.common.cache.LoadingCache;

import com.google.common.cache.RemovalListener;

import com.google.common.cache.RemovalNotification;

public

class DamaSearchServiceImplimplements DamaSearchService {

@Autowired

    private DamaSearchBizImpl                            damaSearchBiz;

    public static LoadingCache<Map, List<DamaSearchCond>>cache = null;

    static {

        cache = CacheBuilder.newBuilder()

// 設定大小,條目數

            .maximumSize(10000)

// 設定時效時間,最後一次被訪問

            .expireAfterAccess(2, TimeUnit.HOURS)

            // 移除快取的監聽器

            .removalListener(new RemovalListener<Map, List<DamaSearchCond>>() {

                public void onRemoval(RemovalNotification<Map, List<DamaSearchCond>>notification) {

                }

            })

            // 快取構建的回撥

            .build(new CacheLoader<Map, List<DamaSearchCond>>() {// 載入快取

                    @Override

                    public List<DamaSearchCond> load(Mapkey) throws Exception {

                        List<DamaSearchCond> list =new ArrayList<DamaSearchCond>(1000);

                        return list;

                    }

                });

        cache.invalidateAll();

    }

    public List<DamaSearchCond> search(Map<String, Object>content) {

        List<DamaSearchCond> results = null;

        try {

            if (cache.get(content) !=null && cache.get(content).size() > 0) {

                results = cache.get(content);

            } else {

                cache.cleanUp();

                results = damaSearchBiz.search(content);

                cache.put(content,results);

            }

        } catch (ExecutionException e) {

// TODO Auto-generated catch block

            e.printStackTrace();

        }

        return results;

    }

}

這篇文章介紹的不錯: http://outofmemory.cn/java/guava/cache/how-to-use-guava-cache