中文版本请参看这里
MMKV 是一个用于微信应用的 高效、小巧、易于使用 的移动端键值存储框架。目前它可在 Android、iOS/macOS、Win32 和 POSIX 上使用。
MMKV for Android
特性
-
高效。MMKV 使用 mmap 将内存与文件同步,并使用 protobuf 进行值的编码/解码,充分利用安卓,达到最佳性能。
- 多进程并发:MMKV 支持进程间的并发读读和读写访问。
-
易于使用。您可以像使用常规变量一样使用 MMKV。所有更改都立即保存,不需要调用
sync
或apply
。 -
小巧.
- 文件很少:MMKV 包含进程锁、编码/解码辅助工具和 mmap 逻辑,除此之外没有了。非常整洁。
- 二进制大小约 50K:MMKV 为每个架构在应用的尺寸上增加了大约 50K,而压缩后(APK)增加更少。
入门使用
Maven方式安装
将以下行添加到您的应用模块中的 build.gradle
文件中:
dependencies {
implementation 'com.tencent:mmkv:1.3.0'
// replace "1.3.0" with any available version
}
关于其他安装选项,请参阅Android 设置。
快速教程
您可以直接使用 MMKV,所有更改都会立即保存,无需 sync
,无需 apply
调用。
在 App 启动时设置 MMKV,例如在您的 Application
类中添加以下行:
public void onCreate() {
super.onCreate();
String rootDir = MMKV.initialize(this);
System.out.println("mmkv root: " + 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", "Hello from mmkv");
String str = kv.decodeString("string");
MMKV 还支持 多进程访问。请在此处找到完整的教程 Android 教程。
性能
写入随机 int
1000 次,我们得到这张图表:
更多基准数据请参考我们的基准测试。
MMKV for iOS/macOS
特性
-
高效。MMKV使用mmap保持内存与文件同步,并使用protobuf进行值的编解码,充分利用iOS/macOS达到最佳性能。
-
易于使用。您可以像使用正常功能一样使用MMKV,无需配置。所有更改都会立即保存,无需调用
synchronize
。 -
小巧.
- 文件数量少:MMKV包含编解码辅助工具和mmap逻辑,但没有其他东西。它非常整洁。
- 二进制大小小于30K:MMKV为每个架构添加至App的大小不足30K,当压缩(IPA)时更少。
入门
通过CocoaPods安装
- 安装CocoaPods;
- 打开终端,使用
cd
命令进入您的项目目录,运行pod repo update
使CocoaPods知晓最新的MMKV版本; - 编辑您的Podfile,在您的app target中添加
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 {
// init MMKV in the main thread
[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 次,我们得到这张图表
更多信息请参考 我们的基准测试。
MMKV for Win32
特性
-
高效。MMKV 使用 mmap 将内存与文件同步,并使用 protobuf 对值进行编码/解码,充分利用 Windows 系统以达到最佳性能。
- 多进程并发:MMKV 支持进程间的并发读读和读写访问。
-
易于使用。您可以随时使用 MMKV。所有更改将立即保存,无需任何
save
或sync
调用。 -
小巧.
- 文件很少:MMKV 包含进程锁、编码/解码辅助工具和 mmap 逻辑,除此之外没有了。非常整洁。
- 约 10K 的二进制大小:MMKV 添加约 10K 的应用程序大小,压缩后更小。
入门指南
通过源码安装
-
从 git 仓库获取源代码
git clone https://github.com/Tencent/MMKV.git
-
将
Win32/MMKV/MMKV.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,请更改
平台工具集
。
有关其他安装选项,请参阅 Win32 安装。
快速教程
您可以使用 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 Win32", "string");
std::string result;
mmkv->getString("string", result);
std::cout << "string = " << result << std::endl;
MMKV 还支持 多进程访问。完整教程可以在 Win32 教程 中找到。
MMKV for POSIX
特性
-
高效性。MMKV使用mmap将内存与文件同步,并使用protobuf进行值的编码/解码,充分利用POSIX以实现最佳性能。
- 多进程并发:MMKV 支持进程间的并发读读和读写访问。
-
易于使用。您可以随时使用 MMKV。所有更改将立即保存,无需任何
save
或sync
调用。 -
小巧.
- 文件很少:MMKV 包含进程锁、编码/解码辅助工具和 mmap 逻辑,除此之外没有了。非常整洁。
- 二进制大小约7K:MMKV为应用程序大小增加了约7K,而在压缩后则增加更少。
入门指南
CMake安装
-
从git仓库获取源代码
git clone https://github.com/Tencent/MMKV.git
-
编辑您的
CMakeLists.txt
文件,添加以下行add_subdirectory(mmkv/POSIX/src mmkv) target_link_libraries(MyApp mmkv)
-
在您的源文件中添加
#include "MMKV.h"
,然后我们就可以完成了。
有关其他安装选项,请参阅POSIX安装。
快速教程
您可以使用 MMKV 尽情发挥。所有更改都会立即保存,不需要 sync
或 save
调用。
在应用启动时设置 MMKV,例如在您的 main()
中添加以下行
#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 Win32", "string");
std::string result;
mmkv->getString("string", result);
std::cout << "string = " << result << std::endl;
MMKV还支持多进程访问。完整的教程可以在这里找到 POSIX教程。
许可协议
MMKV 采用 BSD 3-Clause 许可协议发布。关于详细信息,请参阅 LICENSE.TXT。
变更日志
有关变更历史的详细信息,请查看 CHANGELOG.md。
贡献
如果您想贡献,请查看 CONTRIBUTING.md,并加入我们的 腾讯开源计划。
为了明确对成员的期望,MMKV 采用了广泛使用的贡献者公约中定义的行为准则。我们认为它很好地阐述了我们的价值观。有关更多信息,请查看 Code of Conduct。
常见问题与反馈
个人信息保护规则
非常重视用户隐私:MMKV不获取、收集或上传任何个人信息。请参阅MMKV SDK 个人信息保护规则以获取详细信息。