zoukankan      html  css  js  c++  java
  • 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();
    }
    
  • 相关阅读:
    字符编码
    数据类型
    流程控制之判断,while循环,for循环
    数据类型,与用户交互,格式化输出,基本运算符
    操作系统,编程语言分类,执行python两种方式,变量,内存管理,定义变量的三个特征
    计算机硬件基础-笔记
    20200714_31adb命令和monkey压力稳定性测试
    20200707_28POM
    20200705_27DDT与Yaml数据驱动
    20200702_26UnitTest套件与运行器
  • 原文地址:https://www.cnblogs.com/rickiyang/p/12236042.html
Copyright © 2011-2022 走看看