Windows目前仅支持
mmkv-cli,即CLI Client
mmkv是一个基于内存的键值型数据库(或缓存),支持多种数据结构,包括
- 字符串(string)
- 列表(list)
- 有序集合(sorted set)
- 无序集合(hash set)
- 映射(map)
| 数据类型 | 实现 | 对应数据结构 | 源文件 |
|---|---|---|---|
| string | 支持动态增长的字符串 | mmkv::algo::String | algo/string.h |
| list | 无哨兵的双向链表(暂时) | mmkv::algo::Blist | algo/blist.h, algo/internal/bnode.h, algo/internal/blist_iterator.h |
| sorted set(vset) | AvlTree与哈希表共同实现, AvlTree允许键(权重)重复而member是unique的,基于这个特性和一些命令的实现需要哈希表提供反向映射 | mmkv::db::Vset | db/vset.h, algo/avl_tree.h, algo/internal/avl*.h, algo/internal/func_util.h, algo/dictionary.h |
| hash set | 采用separate list实现的哈希表(支持Incremental rehash) | mmkv::algo::HashSet | algo/hash_set.h, slist.h, reserved_array.h, hash*.h, algo/internal/hash*.h |
| map | 同hash set,不过元素类型是KeyValue | mmkv::algo::Dictionary | algo/dictionary.h, slist.h, reserved_array.h, hash*.h, algo/internal/hash*.h |
| database instance | 以avl-tree作为list、基于separate-list实现的哈希表 | mmkv::db::MmkvDb, mmkv::algo::AvlDictionary | algo/avl_dictionary.h, algo/internal/avl*.h, algo/internal/tree_hash*.h, db/kvdb.h |
暂时没有考虑针对个别数据类型进行特化,比如满足一定的条件,list可以采用局部性更好的动态数组而不是链表等。
现在该项目还处于初级阶段,只是个单纯支持多个数据结构的单机单线程服务器, 尽管要支持多线程是较为简单的(因为kanon支持mutilthread-reactor),但是现在我暂时不关注这方面。
- 支持
string并实现其相关命令 - 支持
list并实现其相关命令 - 支持
sorted set并实现其相关命令 - 支持
map并实现其相关命令 - 支持
hash set并实现其相关命令 - 支持
Log和Recovery(目前仅支持request log) - 实现key的
expiration管理(包括是否允许设置过期时间,删除过期时间,过期键的检测策略) - 实现key的
replacement管理(包括是否配置最大内存占用,达到最大内存占用时的替换策略) - 支持多线程处理请求
- 支持分布式存储(暂时不完整)
- 支持Raft一致性算法,实现高可用
- 实现
translator将输入行翻译成MMBP request - 能够输入
命令(command)和参数(arguments)与mmkv server进行交互 - 能够对用户输入的命令的
提示(hint),历史(history)浏览,以及补全(completion)等 - 实现ternary-tree以优化自动补全
- 支持通过
!command arguments执行shell命令 - 对于输入的命令大小写不敏感(可以识别,提示,补全)
参考mmkvc。
mkdir build
cd build
cmake ..
cmake --build . --target mmkv-cli --parallel $(nproc)
cmake --build . --target mmkv-server --parallel $(nproc)为了避免CMake的命令比较长,也可以通过以下脚本编译:
cd bin
chmod u+x build.sh
./build.sh mmkv-cli
./build.sh mmkv-server话不多说,简单部署下 mmkv-server:
# port default is 9998
./mmkv-server -p [port]然后通过 mmkv-cli 进行交互吧!
./mmkv-cli -h [host ip/domain name] -p [port]
# 进入mmkv的CLI交互环境
# 通过help查看命令
mmkv [...]> help如有其他问题,请参考 文档。