MMKV:微信高效轻量键值存储框架接入与使用指南
一、项目官方信息
| 项目 | 信息 |
|---|---|
| GitHub 仓库 | Tencent/MMKV |
| 中文文档 | README_CN |
| 开源协议 | BSD-3-Clause |
| 主要语言 | C++ |
| Star 数 | 约 19k |
| 最新版本 | v2.4.3 |
MMKV 是微信中使用的高效、轻量、易用的移动端键值存储框架。它支持 Android、iOS/macOS、Windows、POSIX 与 HarmonyOS NEXT,并提供实验性的 Kotlin Multiplatform 支持。MMKV 基于 mmap 内存映射,用 protobuf 编解码,兼顾性能与易用性。

二、官方图片
上图为 MMKV 仓库在 GitHub 上的社交预览图。
三、环境要求
- Android:minSdk 16+;自 v2.0.0 起不再支持 32 位与 API 21/22,旧设备请用 v1.3.x LTS;
- iOS/macOS:Xcode,支持 CocoaPods 或 SPM;
- 其他平台:Windows、POSIX 可直接编译 C++ 核心;
- KMP:实验性包,当前目标 Android 与 iOS。
四、接入步骤
1. Android 接入(Maven)
在 app 模块的 build.gradle 中加入:
dependencies {
implementation 'com.tencent:mmkv:2.4.3'
}
2. 初始化(Android)
在 Application.onCreate 中初始化:
public void onCreate() {
super.onCreate();
String rootDir = MMKV.initialize(this);
System.out.println("mmkv root: " + rootDir);
}
3. 读写数据
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", "Hello from mmkv");
String str = kv.decodeString("string");
所有改动立即写入文件,无需 apply() 或 commit()。
4. iOS/macOS 接入(CocoaPods)
pod 'MMKV'
在 didFinishLaunchingWithOptions 中初始化:
[MMKV initializeMMKV:nil];
MMKV *mmkv = [MMKV defaultMMKV];
[mmkv setBool:YES forKey:@"bool"];
BOOL bValue = [mmkv getBoolForKey:@"bool"];
5. Kotlin Multiplatform 接入
kotlin {
sourceSets {
commonMain.dependencies {
implementation("com.tencent:mmkv-kmp:2.4.3")
}
}
}
五、使用方法
- 多进程并发:支持进程间读-读、读-写并发访问;
- 高性能:mmap + protobuf,随机写 int 1000 次的基准数据优于 SharedPreferences;
- 多类型:支持 bool、int、float、double、string、bytes;
- 轻量:Android 约 50K/架构,iOS 约 30K/架构;
- 迁移:可一键迁移 SharedPreferences / NSUserDefaults 数据;
- 自定义实例:
MMKV.mmkvWithID("myID")按业务隔离存储。
六、常见问题 FAQ
-
MMKV 和 SharedPreferences 区别? 基于 mmap 内存映射,写入即时生效,无需 apply,性能更高。
-
支持多进程吗? 支持,可在进程间并发读写。
-
自 v2.0.0 有什么变化? 不再支持 32 位与 API 21/22,旧设备请用 v1.3.x LTS。
-
支持哪些平台? Android、iOS/macOS、Windows、POSIX、HarmonyOS NEXT,KMP 实验支持。
-
怎么隔离不同业务的数据? 用
mmkvWithID创建自定义实例。 -
可以迁移旧 SharedPreferences 吗? 可以,MMKV 提供迁移 API。
七、跳转链接
- GitHub 仓库:Tencent/MMKV
- 中文文档:README_CN
- Android 教程:android_tutorial
- 发布版本:Releases