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();}
作者:rickiyang
来源链接:https://www.cnblogs.com/rickiyang/p/12236042.html
版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。
2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。