1. 程式人生 > >guava學習筆記-本地快取工具

guava學習筆記-本地快取工具

本地快取工具

我們經常使用ConcurrentHashMap快取資料,如果資料key存在則直接返回,否則計算後儲存再返回。guava提供了功能更強大的快取工具。使用時不用自己put,get的時候會自動快取起來,前提是你必須實現一個load資料的方法。

用CacheLoader構建:

    @Test
    public void testCacheWithLoader() throws ExecutionException {
        LoadingCache<String, Integer> cache = CacheBuilder.newBuilder()
                .
maximumSize(1000) //最大快取資料量 .expireAfterAccess(10, TimeUnit.MINUTES) //過期清除 .build( new CacheLoader<String, Integer>() { //快取規則 public Integer load(String key) { return getObjectData(key); } }); String
k1 = "aaa"; ConcurrentHashMap System.out.println(k1 + " value is: " + cache.get(k1)); System.out.println(k1 + " value is: " + cache.get(k1)); Assert.assertEquals(cache.get(k1), cache.get(k1)); }

用Callable構建,允許你在get的時候做自定義處理。

    @Test
    public void testCacheWithCallable
() { //這裡不需要構建CacheLoader Cache<String, Integer> cache = CacheBuilder.newBuilder().initialCapacity(1000).build(); String key = "a"; final Integer value = 1; try { Integer expectValue = cache.get(key, new Callable<Integer>() { @Override public Integer call() throws Exception { return value; } }); assertEquals(expectValue, value); } catch (ExecutionException e) { e.printStackTrace(); } }