天天看點

guava源碼閱讀

         Guava工程包含了若幹被Google的 Java項目廣泛依賴 的核心庫,例如:集合 [collections] 、緩存 [caching] 、原生類型支援 [primitives support] 、并發庫 [concurrency libraries] 、通用注解 [common annotations] 、字元串處理 [string processing] 、I/O 等等。 所有這些工具每天都在被Google的工程師應用在産品服務中。

      Guava源碼的包圖如下:

guava源碼閱讀

 源碼包的簡單說明:

     com.google.common.annotations:普通注解類型。 

  com.google.common.base:基本工具類庫和接口。 

  com.google.common.cache:緩存工具包,非常簡單易用且功能強大的JVM内緩存。 

  com.google.common.collect:帶泛型的集合接口擴充和實作,以及工具類,這裡你會發現很多好玩的集合。 

  com.google.common.eventbus:釋出訂閱風格的事件總線。 

  com.google.common.hash: 哈希工具包。 

  com.google.common.io:I/O工具包。 

  com.google.common.math:原始算術類型和超大數的運算工具包。 

  com.google.common.net:網絡工具包。 

  com.google.common.primitives:八種原始類型和無符号類型的靜态工具包。 

  com.google.common.reflect:反射工具包。 

  com.google.common.util.concurrent:多線程工具包

其中用到最多的是

     集合類:集合類庫是 Guava 對 JDK 集合類的擴充, 這是 Guava 項目最完善和為人所知的部分。

  1. Immutable collections(不變的集合): 防禦性程式設計, 不可修改的集合,并且提高了效率。

  2. New collection types(新集合類型):JDK collections 沒有的一些集合類型,主要有:multisets,multimaps,tables, bidirectional maps等等

  3. Powerful collection utilities(強大的集合工具類): java.util.Collections 中未包含的常用操作工具類

  4. Extension utilities(擴充工具類): 給 Collection 對象添加一個裝飾器? 實作疊代器? 我們可以更容易使用這些方法。

    緩存: 本地緩存,可以很友善的操作緩存對象,并且支援各種緩存失效行為模式。

         如

Joiner

Splitter

Strings

CharMathcer

等工具類,其中有許多高效優雅的代碼。如Strings.repeat方法裡,為了盡可能提升效率采用了native方法System.arrayCopy。如Splitter中,匿名類的靈活使用。如Joiner.appendTo中優雅的解決最後一個分隔符問題。Splitter.separatorStart中神奇的continue用法。

     Guava還有一個很重要的功能——

GuavaCache

,平時開發過程中,一般背景會用資料庫作為資料存儲。稍大的系統中,為了減少db查詢耗費的時間,會在前面加一層NoSql作為緩存。但是随着系統規模的增加,緩存的查詢壓力會越來越大。本地緩存這時候可以有效的緩解緩存的壓力,特别當某些資料查詢十分頻繁但修改較少的時候。

     例如,一個中國地區表資料,幾乎每個使用者下單都會用到,很少會有改動。如果按正常的緩存流程,那麼每個使用者取城市資訊時,都會觸發一次緩存查詢,這會産生很高的tps,如果在每個伺服器拿到緩存資料後,存到本地記憶體中,并設定一個有效期,例如一分鐘。那麼在一分鐘内都不會再去緩存中查詢這個資料,相當于直接把tps降到了一分鐘一次。當然,這回導緻資料更新有一分鐘得延遲,多以如果對資料實時性要求非常高的,不适合使用。

guava  cache值得學習的地方:

上一篇: guava之cache