MMKV:微信同款高性能 KV 存储,覆盖五大平台

做移动端开发的人大多有过这样的经历:SharedPreferences 写入一次数据,界面上就卡一下。换成 MMKV 之后,这个问题基本消失了。

MMKV 是腾讯微信团队开源的移动端键值存储框架,目前支持 Android、iOS/macOS、Windows、POSIX 和 HarmonyOS NEXT 五个平台。GitHub 上有 18000 多个 star,在 key-value 存储这个领域算是头部项目了。

图片

性能到底好在哪

MMKV 底层用 mmap 做内存映射文件,数据写入后自动同步到磁盘,不需要手动调 sync 或 apply。编码格式用的是 protobuf,序列化和反序列化都很快。

官方给了一组 Android 上的 benchmark:写入 1000 次随机 int,MMKV 的耗时比 SharedPreferences 低两个数量级。iOS 上也类似,写入 10000 次随机 int 的对比数据同样明显。

这个性能差距在实际业务中能感知到。比如存储用户配置、缓存接口数据、记录埋点信息这类高频写入场景,用 SharedPreferences 会明显拖慢响应速度,换成 MMKV 之后基本没有体感延迟。

五个平台,一套思路

MMKV 的设计思路在各平台保持一致:初始化一个实例,然后直接 set/get。不需要建表、不需要写 SQL、不需要管理连接。

Android 接入最简单,Gradle 加一行依赖,Application 里调一下 initialize,三行代码搞定初始化。之后直接用 defaultMMKV() 拿全局实例,set 进去的值立刻落盘。

iOS/macOS 用 CocoaPods 接入,初始化放在 didFinishLaunchingWithOptions 里,用法和 Android 几乎一样。

Windows 版通过源码集成,体积只有 10K 左右。POSIX 版用 CMake,7K 体积。最新支持的 HarmonyOS NEXT 版通过 ohpm 安装,约 600K。

五个平台的 API 设计高度统一,都是 initialize、defaultMMKV、set、get 这套接口。如果你的项目需要跨平台,业务代码基本可以复用,只改初始化部分就行。

图片

多进程和体积

MMKV 支持多进程并发读写,Android、Windows、POSIX 三个平台都有这个能力。对于需要跨进程共享数据的场景,比如主进程和 Service 之间同步配置,这个特性很实用。

体积方面,Android 版约 50K,iOS/macOS 版不到 30K,Windows 版 10K,POSIX 版 7K。对包体积敏感的项目来说,这个开销基本可以忽略。

开源协议和维护

MMKV 用的是 BSD 3-Clause 协议,可以自由修改和商用。腾讯微信团队在持续维护,GitHub 仓库的更新频率正常。项目明确声明不获取、不收集、不上传任何个人信息,对数据安全有要求的团队可以放心用。

如果你想解决移动端 KV 存储的性能问题,或者需要一套跨平台的轻量存储方案,MMKV 值得试试。

动端 KV 存储的性能问题,或者需要一套跨平台的轻量存储方案,MMKV 值得试试。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐