kv4cj:基于mmap的高性能key-value存储库,支持加密与数据安全管理

一个轻量级的键值存储库

分支6Tags4
当前项目代码仓暂无内容

kv4cj

介绍

MMKV 是一个基于 mmap 的高性能 key-value 存储库,旨在解决 SharedPreferences 存储性能和容量受限的问题。

特性

  • 🚀 特性1:提供MMKV初始化接口
  • 🚀 特性2:加密key-value
  • 💪 特性3:存取key-value值
  • 🛠️ 特性4:获取内存相关信息
  • 🌍 特性5:清理删除关闭
  • 💡 特性6:上锁解锁
  • 🚀 特性7:获取mmkv根路径
  • 🚀 特性8:备份和恢复mmkv实例
  • 💪 特性9:内容更改和故障处理
  • 🛠️ 特性10:log打印处理
  • 🌍 特性11:检测MMKV文件是否有效

软件架构

源码目录

.
├─ doc
│  ├─ assets
│  ├─ cjcov
│  └─ feature_api.md
├─ mmkv_cpp
│  ├─ include
│  │  ├─ MemoryFile.h
│  │  ├─ MMBuffer.h
│  │  ├─ MMKV.h
│  │  ├─ MMKVLog.h
│  │  └─ MMKVPredef.h
│  ├─ native-mmkv.cpp
│  └─ native-mmkv.h
├─ src
│  └─ mmkv
│     ├─ mmkv.cj
│     ├─ MMKVHandler.cj
│     ├─ native.cj
│     └─ util.cj
└─ test
   ├─ HLT
   └─ LLT
├─ CHANGELOG.md
├─ cjpm.toml
├─ LICENSE
├─ README.md
├─ README.OpenSource
  • doc 文档目录,用于存放设计、API接口等文档
  • mmkv_cpp native接口封装
  • src 源码目录
  • test 测试目录

接口说明

主要类和函数接口说明详见 API

使用说明

编译构建

前提:参考 https://github.com/Tencent/MMKV/archive/refs/tags/v1.2.15.tar.gz 官网安装 MMKV,版本为 V1.2.15

MMKV编译

  1. Linux 编译

    进入MMKV/Core目录,执行以下命令

    var=$(awk '/add_library.*/{print NR}' CMakeLists.txt) && sed -i "${var}s/STATIC/SHARED/" CMakeLists.txt
    cmake -DCMAKE_BUILD_TYPE=Release
    make
    
  2. Windows 编译

    下载msys2和mingw64

    msys2:https://github.com/msys2/msys2-installer/releases/download/2023-03-18/msys2-x86_64-20230318.exe

    mingw64:https://github.com/niXman/mingw-builds-binaries/releases/download/8.5.0-rt_v10-rev0/x86_64-8.5.0-release-posix-seh-rt_v10-rev0.7z

    将mingw64解压到msys2的根目录

    下载cmake:https://github.com/Kitware/CMake/releases/download/v3.26.3/cmake-3.26.3-windows-x86_64.zip

    将cmake解压到D盘

    用mingw64进入MMKV/Core目录,执行以下命令

    var=$(awk '/add_library.*/{print NR}' CMakeLists.txt) && sed -i "${var}s/STATIC/SHARED/" CMakeLists.txt
    sed -i s/%ws/%ls/g MMKV.cpp MemoryFile_Win32.cpp MMKVPredef.h
    "D:\\cmake-3.26.3-windows-x86_64\\bin\\cmake" -DCMAKE_BUILD_TYPE=Release -G "MinGW Makefiles"
    make
    

kv4cj编译

  1. Linux 编译

    将上面生成的文件 libcore.so,放入根目录的 lib 文件夹下,然后执行

    ./build_linux.sh
    
  2. Windows 编译

    将上面生成的文件 libcore.dll,放入根目录的 lib 文件夹下,然后执行

    build_win.bat
    

功能示例

initializeMMKV功能示例

功能示例描述:设置 MMKV 的根目录

示例代码如下:

testExample1.cj

from  kv4cj import mmkv.*

main() {
	MMKV.initializeMMKV("rootdir")
	return 0
}

编译与执行:

cjc --import-path build -Lbuild/kv4cj -Llib -lcore -lkv4cj_mmkv -lmymmkv testExample1.cj -o main

执行结果展示如下:

[I] <MMKV.cpp:165::initialize> version v1.2.15, page size 4096, arch x86_64
[I] <MMKV.cpp:208::initializeMMKV> root dir: rootdir

defaultMMKV功能示例

功能示例描述:构建全局实例

示例代码如下:

testExample2.cj
import kv4cj.*

main() {
	MMKV.initializeMMKV("rootdir")
	var mmkv = MMKV.defaultMMKV()
	return 0
}

编译并执行:

cjc --import-path build -Lbuild/kv4cj -Llib -lcore -lkv4cj_mmkv -lmymmkv testExample2.cj -o main

执行结果呈现如下:

[I] <MMKV.cpp:165::initialize> version v1.2.15, page size 4096, arch x86_64
[I] <MMKV.cpp:208::initializeMMKV> root dir: rootdir
[I] <MemoryFile.cpp:97::open> open fd[0x3], rootdir/mmkv.default
[I] <MemoryFile.cpp:97::open> open fd[0x4], rootdir/mmkv.default.crc
[I] <MMKV_IO.cpp:81::loadFromFile> loading [mmkv.default] with 0 actual size, file size 4096, InterProcess 0, meta info version:0
[I] <MMKV_IO.cpp:130::loadFromFile> loaded [mmkv.default] with 0 key-values

mmkvWithID功能示例

功能示例描述:根据ID创建自定义实例

示例代码如下:

testExample3.c
import kv4cj.*

main() {
    MMKV.initializeMMKV("rootdir")
    var mmkv = MMKV.mmkvWithID("MyID")
    return 0
}

编译与执行:

cjc --import-path build -Lbuild/kv4cj -Llib -lcore -lkv4cj_mmkv -lmymmkv testExample3.cj -o main

执行结果呈现如下:

[I] <MMKV.cpp:165::initialize> version v1.2.15, page size 4096, arch x86_64
[I] <MMKV.cpp:208::initializeMMKV> root dir: rootdir
[I] <MemoryFile.cpp:97::open> open fd[0x3], rootdir/MyID
[I] <MemoryFile.cpp:97::open> open fd[0x4], rootdir/MyID.crc
[I] <MMKV_IO.cpp:81::loadFromFile> loading [MyID] with 133 actual size, file size 4096, InterProcess 0, meta info version:3
[I] <MMKV_IO.cpp:86::loadFromFile> loading [MyID] with crc 621142152 sequence 1 version 3
[I] <MMKV_IO.cpp:130::loadFromFile> loaded [MyID] with 3 key-values

访问键-值对

功能示例描述:实现对键-值对的存取操作。

以下为示例代码:

testExample4.cj

import kv4cj.*

main() {
    MMKV.initializeMMKV("rootdir")
    var kv = MMKV.mmkvWithID("MyID")
    kv.set("bool", true)
    var value = kv.getBool("bool")

    kv.set("int32", 0x11223344)
    var iValue = kv.getInt32("int32")

    kv.set("string", "Hello from mmkv")
    var str = kv.getString("string")

    return 0
}

编译并执行:

cjc --import-path build -Lbuild/kv4cj -Llib -lcore -lkv4cj_mmkv -lmymmkv testExample4.cj -o main

执行结果呈现如下:

[I] <MMKV.cpp:165::initialize> version v1.2.15, page size 4096, arch x86_64
[I] <MMKV.cpp:208::initializeMMKV> root dir: rootdir
[I] <MemoryFile.cpp:97::open> open fd[0x3], rootdir/MyID
[I] <MemoryFile.cpp:97::open> open fd[0x4], rootdir/MyID.crc
[I] <MMKV_IO.cpp:81::loadFromFile> loading [MyID] with 133 actual size, file size 4096, InterProcess 0, meta info version:3
[I] <MMKV_IO.cpp:86::loadFromFile> loading [MyID] with crc 621142152 sequence 1 version 3
[I] <MMKV_IO.cpp:130::loadFromFile> loaded [MyID] with 3 key-values

开源协议

本项目采用 BSD 3-Clause license 授权,您可以自由地使用并参与到开源中来。

参与贡献

我们热烈欢迎您通过提交PR、报告Issue或以任何形式为项目贡献力量。

项目介绍

一个轻量级的键值存储库

定制我的领域