Java 堆外Map工具


KV鍵值對存儲大家都很熟悉了,Java 中的 map 都是在堆內存儲,如果我們遇到一種情況是map特別大,每次GC我們不想釋放這些空間,那么這一部分緩存數據又該如何處理呢?當然大家說可以使用第三方緩存組件:Redis,HBase,MongoDB,今天給大家多一種選擇:堆外內存。

今天要給大家介紹的是一款使用堆外內存構建本地緩存行的工具:Chronicle-Map 。官網上給出該工具的特性:

  • 高吞吐量,低延遲,跨進程,持久鍵值存儲;

  • 堆外數據存儲,延遲時間為微秒;

  • 基於ConcurrentHashMap;

  • TCP連接;

  • 彈性寫入,如果進程終止,則最后一次寫入不會丟失;

  • 僅復制最新值即可支持很高的更新率;

  • 超低延遲:在某些測試中,Chronicle Map的目標是讀取和寫入查詢的平均延遲小於1微秒;

  • 高並發性:寫查詢可以很好地擴展到服務器中硬件執行線程的數量。讀取查詢永遠不會互相阻塞;

  • 磁盤持久性 -(可選);

  • 多主復制 -(可選,商業功能)-最終一致的,完全冗余的服務器間異步復制,默認情況下“最后寫入勝出”策略允許實現基於狀態的自定義CRDT策略。

下面說一下使用方式:

<dependency>
    <groupId>net.openhft</groupId>
    <artifactId>chronicle-map</artifactId>
    <version>3.17.2</version>
</dependency>

創建一個普通的KV存儲:

ChronicleMap<Long, String> userMap = ChronicleMap
  .of(Long.class, String.class)
  .name("user-map")
  .entries(50)	
  .create();
userMap.put(1122L,"xiaming");

創建一個String 類型的 map,初始值為50個空間。

創建可持久化的KV存儲:

try {
  ChronicleMap<Long, String> persistedUserMap = ChronicleMap
    .of(Long.class, String.class)
    .name("user-map")
    .entries(50)
    .createPersistedTo(new File(System.getProperty("user.home") + "/user.data"));
} catch (IOException e) {
  e.printStackTrace();
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM