Mmkv(Memory Key-Value database/cache)#
Introducation#
mmkv
是一个基于内存的键值型数据库(或缓存),支持多种数据结构,包括
字符串(string)
列表(list)
有序集合(sorted set)
无序集合(hash set)
映射(map)
暂时没有考虑针对个别数据类型进行特化,比如满足一定的条件,list可以采用局部性更好的动态数组而不是链表等。
Schedule#
现在该项目还处于初级阶段,只是个单纯支持多个数据结构的单机单线程服务器, 尽管要支持多线程是较为简单的(因为kanon支持mutilthread-reactor),但是现在我暂时不关注这方面。
Server#
[x] 支持
string
并实现其相关命令[x] 支持
list
并实现其相关命令[x] 支持
sorted set
并实现其相关命令[x] 支持
map
并实现其相关命令[x] 支持
hash set
并实现其相关命令[x] 支持
Log
和Recovery
(目前仅支持request log)[x] 实现key的
expiration
管理(包括是否允许设置过期时间,删除过期时间,过期键的检测策略)[x] 实现key的
replacement
管理(包括是否配置最大内存占用,达到最大内存占用时的替换策略)[x] 支持多线程处理请求
[x] 支持分布式存储(暂时不完整)
[ ] 支持Raft一致性算法,实现高可用
CLI#
[x] 实现
translator
将输入行翻译成MMBP request[x] 能够输入
命令
(command)和参数
(arguments)与mmkv server
进行交互[x] 能够对用户输入的命令的
提示
(hint),历史
(history)浏览,以及补全
(completion)[x] 实现ternary-tree以优化自动补全
[x] 支持通过
!command arguments
执行shell
命令[x] 对于输入的命令大小写不敏感(可以识别,提示,补全)
Client API#
参考mmkvc。
Build#
CMake#
mkdir build
cd build
cmake ..
cmake --build . --target mmkv-cli --parallel $(nproc)
cmake --build . --target mmkv-server --parallel $(nproc)
Shell Script#
为了避免CMake的命令比较长,也可以通过以下脚本编译:
cd bin
chmod u+x build.sh
./build.sh mmkv-cli
./build.sh mmkv-server