google cache接口

介紹一個 google cache [本地緩存],最近在做一些優化,優化的方面也包含了緩存,下面就先介紹一下 google cache 的 cache 接口。

Cache<K,V> 接口

  • 這個接口的實現應該是線程安全的,並且可以被多個併發線程安全訪問

方法

getIfPresent(Object key)
  • 如果這個 key 在緩存中,那麼就可以通過調用該方法來命中緩存,返回返回緩存的 value
  • 如果這個 key 不在緩存中,那麼就無法命中緩存,那麼就會返回 null
get(K key, Callable<? extends V> valueLoader) throws ExecutionException
  • 如果 key 在緩存中命中,則通過 valueLoader 返回該緩存的 value ,且在加在完成之前該緩存的可觀察狀態不會被修改。
  • 當加載緩存的時候,如果遇到一個受檢異常,會拋出 ExecutionException
  • 當加載緩存的時候,如果遇到一個非受檢異常,會拋出 UncheckedExecutionException
  • 當加載緩存的時候,如果遇到一個錯誤,會拋出 ExecutionError
getAllPresent
  • 入參是一個 key 的集合,是 Iterable類型
  • 返回值是一個 ImmutableMap<K, V> 類型
  • 該方法會返回一個與緩存中的 key 關聯的 map,返回的 map 中只會包含在緩存中存在的內容
put
  • 入參是緩存的 key 和 value
  • 返回值是 void 類型
  • 該方法會根據 key 和 value 將數據存儲在緩存中,如果緩存中該 key 已經存在對應的 value,那麼該 key 對應的 value 會被最新的 value 所覆蓋。
putAll
  • 入參是一個 map 類型
  • 返回值是 void類型
  • 將所有映射從指定映射覆制到緩存。對於指定映射中從鍵到值的每個映射,此調用的效果等效於對該映射調用一次 put(k,v)的效果。如果在操作進行過程中修改了指定的映射,則此操作的行爲是不確定的。
invalidate(Object key)
  • 入參是緩存的 key,是一個 object 類型
  • 返回值是 void 類型
  • 刪除該 key 對應的緩存
invalidateAll(Iterable<?> keys)
  • 入參是一個 Iterable類型,對應的是緩存的 key
  • 返回值是 void類型
  • 刪除緩存中指定的 key 集合對應的緩存
invalidateAll()
  • 沒有入參
  • 返回值類型是 void
  • 清除緩存中的所有緩存項
size()
  • 返回緩存中的緩存項的數量大小
stats()
  • 沒有入參
  • 返回值類型是 CacheStats
  • 返回此緩存的累積統計信息的當前快照。所有統計信息均初始化爲零,並在緩存的整個生命週期內單調增加。
asMap()
  • 沒有入參
  • 返回值類型是 ConcurrentMap
  • 以線程安全映射的形式返回存儲在此緩存中的條目的視圖。對 map 的修改將直接影響緩存。
  • 返回的映射中的迭代器至少是弱一致性的:它們可以安全地併發使用,但是如果在創建迭代器後修改了緩存(包括通過逐出),則尚不確定哪個更改(如果有)將反映在其中該迭代器。
cleanUp()
  • 沒有入參
  • 返回值類型是 void 類型
  • 通過執行緩存所需要的任何未決的維護操作。 究竟哪些活動執行 - 如果有的話 - 是實現相關的

package com.google.common.cache;

import com.google.common.annotations.Beta;
import com.google.common.annotations.GwtCompatible;
import com.google.common.collect.ImmutableMap;
import com.google.common.util.concurrent.ExecutionError;
import com.google.common.util.concurrent.UncheckedExecutionException;

import java.util.Map;
import java.util.concurrent.Callable;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.ExecutionException;

import javax.annotation.Nullable;

@Beta
@GwtCompatible
public interface Cache<K, V> {

  @Nullable
  V getIfPresent(Object key);

  V get(K key, Callable<? extends V> valueLoader) throws ExecutionException;

  ImmutableMap<K, V> getAllPresent(Iterable<?> keys);

  void put(K key, V value);

  void putAll(Map<? extends K,? extends V> m);

  void invalidate(Object key);

  void invalidateAll(Iterable<?> keys);

  void invalidateAll();

  long size();

  CacheStats stats();

  ConcurrentMap<K, V> asMap();

  void cleanUp();
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章