Project Icon

MMKV

跨平台高性能键值存储框架

MMKV是一款高效、轻量级的跨平台键值存储框架,在微信等应用中广泛使用。它支持Android、iOS/macOS、Windows、POSIX和HarmonyOS NEXT等多个平台。MMKV通过mmap实现内存与文件同步,并使用protobuf进行数据编解码,达到卓越性能。框架支持多进程并发访问,无需额外同步操作,所有修改即时保存。MMKV代码结构简洁,二进制大小仅约50K,是理想的轻量级存储方案。

许可证 欢迎PR 发布版本 平台

For English version, please click [here](https://github.com/Tencent/MMKV/blob/master/./README_CN.md

MMKV是一个高效小巧易用的移动端键值存储框架,广泛应用于微信中。目前支持AndroidiOS/macOSWindowsPOSIX以及HarmonyOS NEXT平台。

Android版MMKV

特性

  • 高效。MMKV使用mmap来保持内存与文件同步,并使用protobuf进行数值编码/解码,充分利用Android系统以实现最佳性能。

    • 多进程并发:MMKV支持进程间的并发读读和读写访问。
  • 易用。你可以随时使用MMKV。所有更改都会立即保存,无需调用syncapply

  • 小巧

    • 文件数量少:MMKV仅包含进程锁、编码/解码助手和mmap逻辑,没有其他多余内容。非常简洁。
    • 二进制大小约50K:MMKV在每个架构上只增加应用大小约50K,压缩后(APK)更少。

快速入门

通过Maven安装

在应用模块的build.gradle文件中添加以下行:

dependencies {
    implementation 'com.tencent:mmkv:1.3.9'
    // 将"1.3.9"替换为任何可用版本
}

关于其他安装选项,请参阅Android设置

快速教程

你可以随时使用MMKV。所有更改都会立即保存,无需调用syncapply。 在应用启动时设置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教程

性能

随机写入int1000次,我们得到这个图表: 更多基准测试数据,请参考我们的基准测试

iOS/macOS版MMKV

特性

  • 高效。MMKV使用mmap来保持内存与文件同步,并使用protobuf进行数值编码/解码,充分利用iOS/macOS系统以实现最佳性能。

  • 易用。你可以随时使用MMKV,无需任何配置。所有更改都会立即保存,无需调用synchronize

  • 小巧

    • 文件数量少:MMKV仅包含编码/解码助手和mmap逻辑,没有其他多余内容。非常简洁。
    • 二进制大小不到30K:MMKV在每个架构上只增加应用大小不到30K,压缩后(IPA)更少。

快速入门

通过CocoaPods安装:

  1. 安装CocoaPods
  2. 打开终端,cd到你的项目目录,运行pod repo update以使CocoaPods了解最新可用的MMKV版本;
  3. 编辑你的Podfile,在应用目标中添加pod 'MMKV'
  4. 运行pod install
  5. 打开CocoaPods生成的.xcworkspace文件;
  6. 在源文件中添加#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。所有更改都会立即保存,无需调用 savesync

  • 体积小

    • 文件数量少:MMKV 包含进程锁、编码/解码辅助工具和 mmap 逻辑,仅此而已。非常整洁。
    • 二进制大小约 10K:MMKV 仅增加应用程序大小约 10K,压缩后更小。

入门

通过源代码安装

  1. 从 git 仓库获取源代码:

    git clone https://github.com/Tencent/MMKV.git
    
  2. Core/core.vcxproj 添加到你的解决方案中;

  3. MMKV 项目添加到你的项目依赖中;

  4. $(OutDir)include 添加到你的项目的 C/C++ -> 常规 -> 附加包含目录

  5. $(OutDir) 添加到你的项目的 链接器 -> 常规 -> 附加库目录

  6. mmkv.lib 添加到你的项目的 链接器 -> 输入 -> 附加依赖项

  7. 在你的源文件中添加 #include <MMKV/MMKV.h>,完成。

注意:

  1. MMKV 默认使用 MT/MTd 运行时编译。如果你的项目使用 MD/MDd,你应该更改 MMKV 的设置以匹配你的项目(C/C++ -> 代码生成 -> 运行库),反之亦然。
  2. MMKV 使用 Visual Studio 2017 开发,如果你使用不同版本的 Visual Studio,请更改 平台工具集

其他安装选项,请参见 Windows 设置

快速教程

你可以随时使用 MMKV。所有更改都会立即保存,无需调用 syncsave。 在应用程序启动时设置 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。所有更改都会立即保存,无需调用 savesync

  • 体积小

    • 文件数量少:MMKV 包含进程锁、编码/解码辅助工具和 mmap 逻辑,仅此而已。非常整洁。
    • 二进制大小约 7K:MMKV 仅增加应用程序大小约 7K,压缩后更小。

入门

通过 CMake 安装

  1. 从 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。所有更改都会立即保存,无需调用syncflush

  • 体积小

    • 文件数量少:MMKV仅包含进程锁、编码/解码辅助工具和mmap逻辑,没有其他多余内容。它非常精简。
    • 二进制大小约600K:MMKV为每个架构增加应用大小约600K,压缩后(HAR/HAP)更小。

入门指南

通过OHPM安装:

ohpm install @tencent/mmkv

快速教程

您可以随时使用MMKV。所有更改都会立即保存,无需调用syncapply
在应用启动时设置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 定义的行为准则,这在开源界被广泛使用。我们认为它很好地表达了我们的价值观。更多信息请查看行为准则

常见问题与反馈

首先请查看常见问题。如有任何问题,请随时创建issues

个人信息保护规则

我们非常重视用户隐私:MMKV 不会获取、收集或上传任何个人信息。详情请参阅 MMKV SDK 个人信息保护规则

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号