# RogueMap
**Repository Path**: bryan31/RogueMap
## Basic Information
- **Project Name**: RogueMap
- **Description**: RogueMap 是一个高性能的嵌入式存储引擎库,突破 JVM 内存墙。基于内存映射文件,提供四种数据结构:RogueMap(键值存储)、RogueList(双向链表)、RogueSet(并发集合)、RogueQueue(FIFO 队列)。
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: https://roguemap.yomahub.com/
- **GVP Project**: No
## Statistics
- **Stars**: 65
- **Forks**: 17
- **Created**: 2025-12-11
- **Last Updated**: 2026-02-24
## Categories & Tags
**Categories**: cache-modules
**Tags**: None
## README
RogueMap
[](LICENSE)
[](https://www.oracle.com/java/)
[](https://central.sonatype.com/artifact/com.yomahub/roguemap)
简体中文 | [English](README.md)
**RogueMap** 是一个高性能的嵌入式存储引擎库,突破 JVM 内存墙。基于内存映射文件,提供四种数据结构:**RogueMap**(键值存储)、**RogueList**(双向链表)、**RogueSet**(并发集合)、**RogueQueue**(FIFO 队列)。
## 为什么选择 RogueMap?
| 特性 | 传统集合 | RogueMap |
|------|---------|----------|
| **数据容量** | 受限于堆大小 | **无限制**,可达 TB 级 |
| **堆内存占用** | 100% | **仅 15.3%** |
| **GC 影响** | 严重(Full GC 停顿) | **几乎无影响** |
| **持久化** | 不支持 | **支持** |
| **事务** | 不支持 | **原子多键操作** |
## 特性
- **四种数据结构** - RogueMap、RogueList、RogueSet、RogueQueue
- **持久化支持** - 进程重启后数据自动恢复
- **自动扩容** - 文件写满自动增长
- **事务支持** - 原子多键操作,Read Committed 隔离级别
- **崩溃恢复** - CRC32 校验 + 写入代数 + 脏标志
- **零拷贝序列化** - 原始类型直接内存布局
- **高并发支持** - 64 段分段锁,StampedLock 乐观读
- **零依赖** - 核心库无第三方依赖
## 快速开始
### Maven 依赖
```xml
com.yomahub
roguemap
1.0.1
```
### RogueMap - 键值存储
```java
// 临时文件模式(JVM 关闭后自动删除)
RogueMap map = RogueMap.mmap()
.temporary()
.allocateSize(64 * 1024 * 1024L)
.keyCodec(StringCodec.INSTANCE)
.valueCodec(PrimitiveCodecs.LONG)
.build();
map.put("alice", 100L);
map.get("alice"); // 100L
// 持久化模式 + 自动扩容
RogueMap persistentMap = RogueMap.mmap()
.persistent("data/mydata.db")
.autoExpand(true)
.keyCodec(StringCodec.INSTANCE)
.valueCodec(PrimitiveCodecs.LONG)
.build();
// 事务
try (RogueMap.Transaction txn = map.beginTransaction()) {
txn.put("key1", 1L);
txn.put("key2", 2L);
txn.commit(); // 原子提交
}
// 遍历所有键值对
map.forEach((key, value) -> System.out.println(key + " = " + value));
```
### RogueList - 双向链表
```java
// 临时文件模式
RogueList list = RogueList.mmap()
.temporary()
.elementCodec(StringCodec.INSTANCE)
.build();
list.addLast("hello"); // O(1) - 推荐
list.addLast("world");
list.get(0); // "hello" - O(1) 随机访问
// 持久化模式
RogueList persistentList = RogueList.mmap()
.persistent("data/mylist.db")
.elementCodec(PrimitiveCodecs.LONG)
.build();
```
### RogueSet - 并发集合
```java
// 临时文件模式
RogueSet set = RogueSet.mmap()
.temporary()
.elementCodec(StringCodec.INSTANCE)
.build();
set.add("apple"); // true
set.contains("apple"); // true
set.remove("apple"); // true
// 持久化模式
RogueSet persistentSet = RogueSet.mmap()
.persistent("data/myset.db")
.elementCodec(PrimitiveCodecs.LONG)
.build();
```
### RogueQueue - FIFO 队列
```java
// 链表模式(无界)
RogueQueue queue = RogueQueue.mmap()
.temporary()
.linked()
.elementCodec(StringCodec.INSTANCE)
.build();
queue.offer("task1");
queue.poll(); // "task1"
// 环形缓冲区模式(有界)
RogueQueue circular = RogueQueue.mmap()
.persistent("data/queue.db")
.circular(1024, 64) // 容量=1024,最大元素=64字节
.elementCodec(PrimitiveCodecs.LONG)
.build();
```
## 支持的数据类型
**原始类型**(零拷贝):`Long`、`Integer`、`Double`、`Float`、`Short`、`Byte`、`Boolean`
**字符串**:`StringCodec.INSTANCE`
**对象**:`KryoObjectCodec.create(YourClass.class)`(可选依赖)
## 文档
完整文档、性能测试报告和高级用法,请访问官网。
## 系统要求
- Java 8+
- Maven 3.6+
## 许可证
[Apache License 2.0](LICENSE)