For English version, please click [here](https://github.com/Tencent/MMKV/blob/master/./README_CN.md
MMKV是一个高效、小巧、易用的移动端键值存储框架,广泛应用于微信中。目前支持Android、iOS/macOS、Windows、POSIX以及HarmonyOS NEXT平台。
Android版MMKV
特性
-
高效。MMKV使用mmap来保持内存与文件同步,并使用protobuf进行数值编码/解码,充分利用Android系统以实现最佳性能。
- 多进程并发:MMKV支持进程间的并发读读和读写访问。
-
易用。你可以随时使用MMKV。所有更改都会立即保存,无需调用
sync
或apply
。 -
小巧。
- 文件数量少:MMKV仅包含进程锁、编码/解码助手和mmap逻辑,没有其他多余内容。非常简洁。
- 二进制大小约50K:MMKV在每个架构上只增加应用大小约50K,压缩后(APK)更少。
快速入门
通过Maven安装
在应用模块的build.gradle
文件中添加以下行:
dependencies {
implementation 'com.tencent:mmkv:1.3.9'
// 将"1.3.9"替换为任何可用版本
}
关于其他安装选项,请参阅Android设置。
快速教程
你可以随时使用MMKV。所有更改都会立即保存,无需调用sync
或apply
。
在应用启动时设置MMKV,例如在你的Application
类中,添加以下代码:
public void onCreate() {
super.onCreate();
String rootDir = MMKV.initialize(this);
System.out.println("mmkv根目录: " + rootDir);
//……
}
MMKV有一个全局实例,可以直接使用:
import com.tencent.mmkv.MMKV;
MMKV kv = MMKV.defaultMMKV();
kv.encode("bool", true);
boolean bValue = kv.decodeBool("bool");
kv.encode("int", Integer.MIN_VALUE);
int iValue = kv.decodeInt("int");
kv.encode("string", "来自mmkv的问候");
String str = kv.decodeString("string");
MMKV还支持多进程访问。完整教程可以在这里找到Android教程。
性能
随机写入int
1000次,我们得到这个图表:
更多基准测试数据,请参考我们的基准测试。
iOS/macOS版MMKV
特性
-
高效。MMKV使用mmap来保持内存与文件同步,并使用protobuf进行数值编码/解码,充分利用iOS/macOS系统以实现最佳性能。
-
易用。你可以随时使用MMKV,无需任何配置。所有更改都会立即保存,无需调用
synchronize
。 -
小巧。
- 文件数量少:MMKV仅包含编码/解码助手和mmap逻辑,没有其他多余内容。非常简洁。
- 二进制大小不到30K:MMKV在每个架构上只增加应用大小不到30K,压缩后(IPA)更少。
快速入门
通过CocoaPods安装:
- 安装CocoaPods;
- 打开终端,
cd
到你的项目目录,运行pod repo update
以使CocoaPods了解最新可用的MMKV版本; - 编辑你的Podfile,在应用目标中添加
pod 'MMKV'
; - 运行
pod install
; - 打开CocoaPods生成的
.xcworkspace
文件; - 在源文件中添加
#import <MMKV/MMKV.h>
,大功告成。
关于其他安装选项,请参阅iOS/macOS设置。
快速教程
你可以随时使用MMKV,无需任何配置。所有更改都会立即保存,无需调用synchronize
。
在应用程序启动时设置 MMKV,在你的 -[MyApp application: didFinishLaunchingWithOptions:]
中添加以下代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 在主线程中初始化 MMKV
[MMKV initializeMMKV:nil];
//...
return YES;
}
MMKV 有一个全局实例,可以直接使用:
MMKV *mmkv = [MMKV defaultMMKV];
[mmkv setBool:YES forKey:@"bool"];
BOOL bValue = [mmkv getBoolForKey:@"bool"];
[mmkv setInt32:-1024 forKey:@"int32"];
int32_t iValue = [mmkv getInt32ForKey:@"int32"];
[mmkv setString:@"hello, mmkv" forKey:@"string"];
NSString *str = [mmkv getStringForKey:@"string"];
MMKV 还支持多进程访问。完整教程可以在这里找到。
性能
随机写入 int
10000 次,我们得到这个图表:
更多基准测试数据,请参考我们的基准测试。
Windows 版 MMKV
特性
-
高效。MMKV 使用 mmap 保持内存与文件同步,使用 protobuf 编码/解码值,充分利用 Windows 以实现最佳性能。
- 多进程并发:MMKV 支持进程间的并发读-读和读-写访问。
-
易用。你可以随时使用 MMKV。所有更改都会立即保存,无需调用
save
或sync
。 -
体积小。
- 文件数量少:MMKV 包含进程锁、编码/解码辅助工具和 mmap 逻辑,仅此而已。非常整洁。
- 二进制大小约 10K:MMKV 仅增加应用程序大小约 10K,压缩后更小。
入门
通过源代码安装
-
从 git 仓库获取源代码:
git clone https://github.com/Tencent/MMKV.git
-
将
Core/core.vcxproj
添加到你的解决方案中; -
将
MMKV
项目添加到你的项目依赖中; -
将
$(OutDir)include
添加到你的项目的C/C++
->常规
->附加包含目录
; -
将
$(OutDir)
添加到你的项目的链接器
->常规
->附加库目录
; -
将
mmkv.lib
添加到你的项目的链接器
->输入
->附加依赖项
; -
在你的源文件中添加
#include <MMKV/MMKV.h>
,完成。
注意:
- MMKV 默认使用
MT/MTd
运行时编译。如果你的项目使用MD/MDd
,你应该更改 MMKV 的设置以匹配你的项目(C/C++
->代码生成
->运行库
),反之亦然。 - MMKV 使用 Visual Studio 2017 开发,如果你使用不同版本的 Visual Studio,请更改
平台工具集
。
其他安装选项,请参见 Windows 设置。
快速教程
你可以随时使用 MMKV。所有更改都会立即保存,无需调用 sync
或 save
。
在应用程序启动时设置 MMKV,比如在你的 main()
中,添加以下代码:
#include <MMKV/MMKV.h>
int main() {
std::wstring rootDir = getYourAppDocumentDir();
MMKV::initializeMMKV(rootDir);
//...
}
MMKV 有一个全局实例,可以直接使用:
auto mmkv = MMKV::defaultMMKV();
mmkv->set(true, "bool");
std::cout << "bool = " << mmkv->getBool("bool") << std::endl;
mmkv->set(1024, "int32");
std::cout << "int32 = " << mmkv->getInt32("int32") << std::endl;
mmkv->set("Hello, MMKV for Windows", "string");
std::string result;
mmkv->getString("string", result);
std::cout << "string = " << result << std::endl;
MMKV 还支持多进程访问。完整教程可以在这里找到 Windows 教程。
POSIX 版 MMKV
特性
-
高效。MMKV 使用 mmap 保持内存与文件同步,使用 protobuf 编码/解码值,充分利用 POSIX 以实现最佳性能。
- 多进程并发:MMKV 支持进程间的并发读-读和读-写访问。
-
易用。你可以随时使用 MMKV。所有更改都会立即保存,无需调用
save
或sync
。 -
体积小。
- 文件数量少:MMKV 包含进程锁、编码/解码辅助工具和 mmap 逻辑,仅此而已。非常整洁。
- 二进制大小约 7K:MMKV 仅增加应用程序大小约 7K,压缩后更小。
入门
通过 CMake 安装
-
从 git 仓库获取源代码:
git clone https://github.com/Tencent/MMKV.git
2. 编辑你的 `CMakeLists.txt`,添加以下几行:
```cmake
add_subdirectory(mmkv/POSIX/src mmkv)
target_link_libraries(MyApp
mmkv)
```
3. 在你的源文件中添加 `#include "MMKV.h"`,这样就完成了。
关于其他安装选项,请参见 [POSIX 设置](https://github.com/Tencent/MMKV/wiki/posix_setup)。
### 快速教程
你可以直接使用 MMKV。所有更改都会立即保存,无需调用 `sync` 或 `save`。
在应用程序启动时设置 MMKV,例如在你的 `main()` 函数中,添加以下几行:
```C++
#include "MMKV.h"
int main() {
std::string rootDir = getYourAppDocumentDir();
MMKV::initializeMMKV(rootDir);
//...
}
MMKV 有一个全局实例,可以直接使用:
auto mmkv = MMKV::defaultMMKV();
mmkv->set(true, "bool");
std::cout << "bool = " << mmkv->getBool("bool") << std::endl;
mmkv->set(1024, "int32");
std::cout << "int32 = " << mmkv->getInt32("int32") << std::endl;
mmkv->set("Hello, MMKV for Windows", "string");
std::string result;
mmkv->getString("string", result);
std::cout << "string = " << result << std::endl;
MMKV 还支持多进程访问。完整教程可以在这里找到 POSIX 教程。
鸿蒙操作系统NEXT版本的MMKV
特性
-
高效。MMKV使用mmap保持内存与文件同步,并使用protobuf进行值的编码/解码,充分利用原生平台以实现最佳性能。
- 多进程并发:MMKV支持进程间的并发读-读和读-写访问。
-
易用。您可以随时使用MMKV。所有更改都会立即保存,无需调用
sync
或flush
。 -
体积小。
- 文件数量少:MMKV仅包含进程锁、编码/解码辅助工具和mmap逻辑,没有其他多余内容。它非常精简。
- 二进制大小约600K:MMKV为每个架构增加应用大小约600K,压缩后(HAR/HAP)更小。
入门指南
通过OHPM安装:
ohpm install @tencent/mmkv
快速教程
您可以随时使用MMKV。所有更改都会立即保存,无需调用sync
或apply
。
在应用启动时设置MMKV,例如在EntryAbility.onCreate()
函数中添加以下代码:
import { MMKV } from '@tencent/mmkv';
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
let appCtx = this.context.getApplicationContext();
let mmkvRootDir = MMKV.initialize(appCtx);
console.info('mmkv根目录:', mmkvRootDir);
……
}
MMKV有一个全局实例,可以直接使用:
import { MMKV } from '@tencent/mmkv';
let mmkv = MMKV.defaultMMKV();
mmkv.encodeBool('bool', true);
console.info('bool = ', mmkv.decodeBool('bool'));
mmkv.encodeInt32('int32', Math.pow(2, 31) - 1);
console.info('最大int32 = ', mmkv.decodeInt32('int32'));
mmkv.encodeInt64('int', BigInt(2**63) - BigInt(1));
console.info('最大int64 = ', mmkv.decodeInt64('int'));
let str: string = '来自MMKV的鸿蒙操作系统问候';
mmkv.encodeString('string', str);
console.info('string = ', mmkv.decodeString('string'));
let arrayBuffer: ArrayBuffer = StringToArrayBuffer('来自MMKV的鸿蒙操作系统字节问候');
mmkv.encodeBytes('bytes', arrayBuffer);
let bytes = mmkv.decodeBytes('bytes');
console.info('bytes = ', ArrayBufferToString(bytes));
如您所见,MMKV使用起来相当简单。 完整文档请参阅鸿蒙操作系统NEXT教程。
许可证
MMKV 基于 BSD 3-Clause 许可证发布。详情请查看 LICENSE.TXT。
更新日志
有关更改历史的详细信息,请查看 CHANGELOG.md。
贡献
如果您有兴趣贡献,请查看 CONTRIBUTING.md,也可以加入我们的腾讯开源计划。
为了明确我们对成员的期望,MMKV 采用了由 Contributor Covenant 定义的行为准则,这在开源界被广泛使用。我们认为它很好地表达了我们的价值观。更多信息请查看行为准则。
常见问题与反馈
个人信息保护规则
我们非常重视用户隐私:MMKV 不会获取、收集或上传任何个人信息。详情请参阅 MMKV SDK 个人信息保护规则。