moon publish
基于 MoonBit 语言特性实现的内存型非关系型数据库,参考 Redis 设计。
moon run . --target native
moon test
当前测试覆盖:64 个测试用例,全部通过。
moonbitDB/ ├── lib/ # 核心库(非 main 包,可被其他包 import) │ ├── database.mbt # 核心数据库实现(~3200 行) │ └── moon.pkg.json ├── demo.mbt # 快速开始演示(主包入口) ├── moon.pkg.json # 主包配置(is_main: true,依赖 lib) ├── examples/ # 场景部署示例(独立子包,均可运行) │ ├── basic_usage/ # 基础 API 使用示例 │ │ ├── main.mbt │ │ └── moon.pkg.json │ ├── leaderboard/ # 游戏排行榜场景 │ │ ├── main.mbt │ │ └── moon.pkg.json │ ├── shopping_cart/ # 电商购物车 / 缓存场景 │ │ ├── main.mbt │ │ └── moon.pkg.json │ └── cli_repl/ # 命令行交互演示 │ ├── main.mbt │ └── moon.pkg.json ├── moon.mod.json # 模块配置(moonbitdb/moonbitdb) └── README.md # 本文档
包架构说明:核心逻辑放在 lib/ 子包(非 main),主包和 examples 均依赖 lib。这种设计符合 MoonBit 规范,避免了 “examples depend on main package” 的警告。
lib/
共支持 80+ 个命令,覆盖 Redis 核心功能。
SET
(key, value) -> Unit
GET
(key) -> String?
DEL
(key) -> Bool
EXISTS
APPEND
(key, value) -> Int
STRLEN
(key) -> Int
INCR
(key) -> Int?
DECR
KEYS
() -> Array[String]
KEYS_PATTERN
(pattern) -> Array[String]
*
?
TYPE
(key) -> String
EXPIRE
(key, seconds) -> Bool
PEXPIRE
(key, ms) -> Bool
TTL
PTTL
PERSIST
RENAME
(old_key, new_key) -> Bool
RENAMENX
RANDOMKEY
() -> String?
HSET
(key, field, value) -> Unit
HGET
(key, field) -> String?
HDEL
(key, field) -> Bool
HGETALL
(key) -> Map[String, String]
HLEN
LPUSH
RPUSH
LPOP
RPOP
LLEN
LRANGE
(key, start, end) -> Array[String]
LINDEX
(key, index) -> String?
LSET
(key, index, value) -> Bool
LREM
(key, count, value) -> Int
LINSERT
(key, before, pivot, value) -> Int
LPUSHX
RPUSHX
RPOPLPUSH
(source, dest) -> String?
SADD
(key, value) -> Bool
SMEMBERS
(key) -> Array[String]
SREM
SCARD
SISMEMBER
SINTER
(keys) -> Array[String]
SINTERSTORE
(dest, keys) -> Int
SUNION
SUNIONSTORE
SDIFF
SDIFFSTORE
SMOVE
(source, dest, value) -> Bool
SPOP
ZADD
(key, score, member) -> Bool
ZRANGE
ZCARD
ZSCORE
(key, member) -> Float?
ZREM
(key, member) -> Bool
ZRANGEBYSCORE
(key, min, max) -> Array[String]
ZCOUNT
(key, min, max) -> Int
ZREVRANGE
ZREVRANGEBYSCORE
(key, max, min) -> Array[String]
ZRANK
(key, member) -> Int?
ZREVRANK
ZINCRBY
(key, increment, member) -> Float
ZREMRANGEBYRANK
(key, start, end) -> Int
ZREMRANGEBYSCORE
ZPOPMIN
(key) -> (String, Float)?
ZPOPMAX
MSET
(keys, values) -> Unit
MGET
(keys) -> Array[String?]
MDEL
(keys) -> Int
HMSET
(key, fields, values) -> Unit
HMGET
(key, fields) -> Array[String?]
DBSIZE
() -> Int
FLUSHDB
() -> Unit
FLUSHALL
PING
() -> String
ECHO
(message) -> String
INFO
TIME
() -> (Int, Int)
COMMAND
OBJECT_ENCODING
new
() -> Database
set_time
(time_ms) -> Unit
advance_time
(ms) -> Unit
check_expired
所有示例均为独立子包,可单独运行。运行前需先安装 MoonBit CLI 工具。
直接运行主包即可看到 8 大功能模块的完整演示:
输出预览:
======================================== MoonBitDB - 快速开始演示 ======================================== 📌 1. String 基础操作 GET greeting = "Hello, MoonBitDB!" INCR counter = 11 📌 2. Hash 用户信息存储 HLEN user:1001 = 3 📌 3. List 任务队列 LRANGE tasks 0 -1 = [完成报告, 代码审查, 团队会议] 📌 4. Set 标签系统 SCARD = 3 (自动去重) 📌 5. Sorted Set 排行榜 TOP 3 (ZREVRANGE 0 2): #1 玩家D - 3200分 #2 玩家B - 2500分 📌 6. Key 过期机制 65秒后 EXISTS = false 📌 7. 批量操作 📌 8. 服务器信息 ======================================== ✅ 演示完成! ========================================
覆盖所有 5 种数据结构的基础操作演示。
moon run examples/basic_usage --target native
参考 examples/basic_usage/main.mbt
10 阶段完整场景:初始化分数 → TOP 5 查询 → 对局更新 → 排名变化 → 分数统计 → 每日榜单 → 领奖弹出 → 好友关系 → 消息队列 → 状态统计。
moon run examples/leaderboard --target native
参考 examples/leaderboard/main.mbt
展示了如何使用:
10 阶段完整场景:商品缓存 → 购物车 → 浏览历史 → 收藏 → 共同收藏 → 商品标签 → 销量排行 → 会话管理 → 缓存预热 → 状态总览。
moon run examples/shopping_cart --target native
参考 examples/shopping_cart/main.mbt
模拟 Redis 风格的命令行交互,自动执行 45 条演示命令并输出结果。
moon run examples/cli_repl --target native
参考 examples/cli_repl/main.mbt
支持解析和执行 60+ 命令,包括 SET/GET/HSET/LPUSH/SADD/ZADD/MSET 等全部命令类型。
根据moonbit的特性,设计非关系型数据库
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
moonbitDB
基于 MoonBit 语言特性实现的内存型非关系型数据库,参考 Redis 设计。
快速开始
运行演示
运行测试
当前测试覆盖:64 个测试用例,全部通过。
项目结构
支持的命令
共支持 80+ 个命令,覆盖 Redis 核心功能。
String 命令
SET(key, value) -> UnitGET(key) -> String?DEL(key) -> BoolEXISTS(key) -> BoolAPPEND(key, value) -> IntSTRLEN(key) -> IntINCR(key) -> Int?DECR(key) -> Int?Key 命令
KEYS() -> Array[String]KEYS_PATTERN(pattern) -> Array[String]*?)TYPE(key) -> StringEXPIRE(key, seconds) -> BoolPEXPIRE(key, ms) -> BoolTTL(key) -> IntPTTL(key) -> IntPERSIST(key) -> BoolRENAME(old_key, new_key) -> BoolRENAMENX(old_key, new_key) -> BoolRANDOMKEY() -> String?Hash 命令
HSET(key, field, value) -> UnitHGET(key, field) -> String?HDEL(key, field) -> BoolHGETALL(key) -> Map[String, String]HLEN(key) -> IntList 命令
LPUSH(key, value) -> IntRPUSH(key, value) -> IntLPOP(key) -> String?RPOP(key) -> String?LLEN(key) -> IntLRANGE(key, start, end) -> Array[String]LINDEX(key, index) -> String?LSET(key, index, value) -> BoolLREM(key, count, value) -> IntLINSERT(key, before, pivot, value) -> IntLPUSHX(key, value) -> IntRPUSHX(key, value) -> IntRPOPLPUSH(source, dest) -> String?Set 命令
SADD(key, value) -> BoolSMEMBERS(key) -> Array[String]SREM(key, value) -> BoolSCARD(key) -> IntSISMEMBER(key, value) -> BoolSINTER(keys) -> Array[String]SINTERSTORE(dest, keys) -> IntSUNION(keys) -> Array[String]SUNIONSTORE(dest, keys) -> IntSDIFF(keys) -> Array[String]SDIFFSTORE(dest, keys) -> IntSMOVE(source, dest, value) -> BoolSPOP(key) -> String?Sorted Set 命令
ZADD(key, score, member) -> BoolZRANGE(key, start, end) -> Array[String]ZCARD(key) -> IntZSCORE(key, member) -> Float?ZREM(key, member) -> BoolZRANGEBYSCORE(key, min, max) -> Array[String]ZCOUNT(key, min, max) -> IntZREVRANGE(key, start, end) -> Array[String]ZREVRANGEBYSCORE(key, max, min) -> Array[String]ZRANK(key, member) -> Int?ZREVRANK(key, member) -> Int?ZINCRBY(key, increment, member) -> FloatZREMRANGEBYRANK(key, start, end) -> IntZREMRANGEBYSCORE(key, min, max) -> IntZPOPMIN(key) -> (String, Float)?ZPOPMAX(key) -> (String, Float)?批量命令
MSET(keys, values) -> UnitMGET(keys) -> Array[String?]MDEL(keys) -> IntHMSET(key, fields, values) -> UnitHMGET(key, fields) -> Array[String?]服务器命令
DBSIZE() -> IntFLUSHDB() -> UnitFLUSHALL() -> UnitPING() -> StringECHO(message) -> StringINFO() -> StringTIME() -> (Int, Int)COMMAND() -> Array[String]OBJECT_ENCODING(key) -> String?辅助方法
new() -> Databaseset_time(time_ms) -> Unitadvance_time(ms) -> Unitcheck_expired(key) -> Bool部署示例
所有示例均为独立子包,可单独运行。运行前需先安装 MoonBit CLI 工具。
1. 快速开始演示
直接运行主包即可看到 8 大功能模块的完整演示:
输出预览:
2. 基础 API 使用示例
覆盖所有 5 种数据结构的基础操作演示。
参考 examples/basic_usage/main.mbt
3. 游戏排行榜系统
10 阶段完整场景:初始化分数 → TOP 5 查询 → 对局更新 → 排名变化 → 分数统计 → 每日榜单 → 领奖弹出 → 好友关系 → 消息队列 → 状态统计。
参考 examples/leaderboard/main.mbt
展示了如何使用:
4. 电商购物车 & 缓存
10 阶段完整场景:商品缓存 → 购物车 → 浏览历史 → 收藏 → 共同收藏 → 商品标签 → 销量排行 → 会话管理 → 缓存预热 → 状态总览。
参考 examples/shopping_cart/main.mbt
展示了如何使用:
5. CLI 命令行交互
模拟 Redis 风格的命令行交互,自动执行 45 条演示命令并输出结果。
参考 examples/cli_repl/main.mbt
支持解析和执行 60+ 命令,包括 SET/GET/HSET/LPUSH/SADD/ZADD/MSET 等全部命令类型。