MMKV 基本介绍 正因为 SharedPreferences 还有很大的优化空间,因为我们才会尝试其他存储框架;其中 腾讯 MMKV 得到很多人的支持; MMKV 分别代表的是 Memory...MMKV 优势 和尚从如下几个角度简单分析一下 MMKV 的优势; a....MMKV 应用与注意 MMKV 的应用非常简单,根据官网集成即可: Maven 仓库引入 mmkv; implementation 'com.tencent:mmkv-static:1.2.2' 初始化...; MMKV.initialize(this); 根据文件名称创建对应存储文件;建议设置 MMKV 为全局实例,方便统一处理; // 默认文件名 MMKV kv = MMKV.defaultMMKV(...提供了一键转换为 MMKV 方式; MMKV mmkv = MMKV.mmkvWithID(Constants.SP_APP_CONFIG); SharedPreferences sp = context.getSharedPreferences
MMKV MMKV——基于 mmap 的高性能通用 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。...快速上手 添加依赖: dependencies { implementation 'com.tencent:mmkv:1.0.23' // replace "1.0.23" with any...available version } 在 App 启动时初始化 MMKV,设定 MMKV 的根目录 (默认/data/data/xxx/files/mmkv/) (sp存储在/data/data...(this); System.out.println("mmkv root: " + rootDir); //…… } 所有变更立马生效,无需调用 sync、apply。...MMKV 会提供一个全局的实例,使用实例: import com.tencent.mmkv.MMKV; //…… MMKV kv = MMKV.defaultMMKV(); kv.encode("bool
MMKV 优势 小菜从如下几个角度简单分析一下 MMKV 的优势; a....MMKV 应用与注意 MMKV 的应用非常简单,根据官网集成即可: a....Maven 仓库引入 mmkv; implementation 'com.tencent:mmkv-static:1.2.2' b. 初始化; MMKV.initialize(this); c....根据文件名称创建对应存储文件;建议设置 MMKV 为全局实例,方便统一处理; // 默认文件名 MMKV kv = MMKV.defaultMMKV(); // 指定文件名 MMKV kv = MMKV.mmkvWithID...对于应用中已存在 SharedPreferences 时,MMKV 提供了一键转换为 MMKV 方式; MMKV mmkv = MMKV.mmkvWithID(Constants.SP_APP_CONFIG
正因如此,后来也出现了一些SP的替代解决方案,比如MMKV。...MMKV的使用 MMKV 是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。...MMKV优点 1.MMKV实现了SharedPreferences接口,可以无缝切换。...详细的使用细节可以参考文档:https://github.com/Tencent/MMKV/wiki MMKV原理 为什么MMKV写入速度更快 IO操作 我们知道,SP是写入是基于IO操作的,为了了解IO...MMKV数据结构 MMKV数据结构如下 MMKV使用Protobuf存储数据,冗余数据更少,更省空间,同时可以方便地在末尾追加数据。
MMKV介绍 MMKV——基于 mmap 的高性能通用 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。...https://github.com/Tencent/MMKV/blob/master/readme_cn.md MMKV 是基于 mmap 内存映射的移动端通用 key-value 组件,底层序列化/...(dir); Log.i("MMKV", "mmkv root: " + rootDir); 3.获取实例 // 获取默认的全局实例 MMKV kv = MMKV.defaultMMKV(); //...根据业务区别存储, 附带一个自己的 ID MMKV kv = MMKV.mmkvWithID("MyID"); // 多进程同步支持 MMKV kv = MMKV.mmkvWithID("MyID"...、SharedPreferences 和 SQLite 同步写入 1000 条数据的测试结果 // MMKV MMKV write int: loop[1000]: 12 ms MMKV read int
MMKV 使用了 AES CFB-128 算法来加密/解密。我们选择 CFB 而不是常见的 CBC 算法,主要是因为 MMKV 使用 append-only 实现插入/更新操作,流式加密算法更加合适。...事实上这个功能也回馈到了 iOS 版,所以现在两个系统的 MMKV 都有加密功能。 MMKV 使用 iOS 的使用在前文已经陈述,这里简单介绍一下 Android 的用法。...在 App 启动时初始化 MMKV,设定 MMKV 的根目录(files/mmkv/),例如在 MainActivity 里: protected void onCreate(Bundle savedInstanceState...", "root: " + rootDir); //…… } MMKV 提供一个全局的实例,可以直接使用: import com.tencent.mmkv.MMKV; //…… MMKV kv...String str = kv.decodeString("string"); 如果不同业务需要区别存储,也可以单独创建自己的实例: MMKV* mmkv = MMKV.mmkvWithID("MyID
现在一并对外开源: https://github.com/tencent/mmkv 欢迎 Star、提 Issue 和 PR。 前言 MMKV 的源起、设计原理与具体实现参考前文。...MMKV 追求的是极致的访问速度,我们要尽可能地避免进程间通信,CS 架构是不可取的。再考虑到 MMKV 底层使用 mmap 实现,采用去中心化的架构是很自然的选择。...综合各种考虑,我们先将文件锁作为一个简单的互斥锁,进行 MMKV 的多进程开发,稍后再回头解决递归锁和读写锁升级/降级的问题。 多进程实现细节 首先我们简单回顾一下 MMKV 原来的逻辑。...,MMKV 只选用最后写入的作为有效键值。...MMKV 多进程性能 写了个简单的测试,创建两个 Service,测试 MMKV、MultiProcessSharedPreferences、SQLite 多进程读写的性能,具体代码见 GitHub。
老哥推荐使用 MMKV,那么什么是 MMKV?用它又有什么优势呢?...rootDir = MMKV.initialize(this); 而我们输出这个地址瞧一瞧: /data/user/0/com.example.heliquan/files/mmkv MMKV 提供一个全局的实例...,可以直接使用: MMKV mmkv = MMKV.defaultMMKV(); mmkv.putBoolean("hlqBoolean", true); mmkv.putString("hlqStr"..., "HLQ_Struggle"); mmkv.putInt("hlqInt", 666); mmkv.putFloat("hlqFloat", 1.0f); mmkv.putLong("hlqLong...一起来看: // 写入数据 mmkv.encode("userId",1); // 获取数据 Log.e(TAG,"修改前的值为:"+mmkv.decodeInt("userId")); mmkv.encode
1.0.16,关于 MMKV 的编译可以阅读这篇文档:https://github.com/Tencent/MMKV/wiki/android_setup 新媒体排版 MMKV 是微信于 2018 年...如果找不到对应的 MMKV 对象,构建一个新的 MMKV 对象,加入 map 后返回。...构造 MMKV 对象 我们可以看看在 MMKV 的构造函数中做了什么: MMKV::MMKV( const std::string &mmapID, int size, MMKVMode mode...因此 MMKV 采用了文件锁的设计,它的缺点在于不支持递归加锁,不支持锁的升级/降级,因此 MMKV 自行对这两个功能进行了实现。...MMKV 的初始化过程主要完成了对 rootDir 的初始化及创建,它位于应用的内部存储 file 下的 mmkv 文件夹。
Android MVVM框架搭建(三)MMKV + Room + RxJava2 前言 正文 一、添加依赖 二、MMKV 1. 初始化 2. 数据存取 3. 使用 三、Room 1....,例如腾讯的MMKV库,比较的好用,在我以往的博客中也没有使用过MMKV,就在本文中使用吧,其实JetPack中也有一个组件是用来解决SharedPreferences的,就是DataStore,但是我发现它的使用群体还没有上去...初始化 第一步就是在自定义的Application中进行初始化,在onCreate方法中增加如下代码: //MMKV初始化 MMKV.initialize(this); 当然你也可以这样写...用于查看你的缓存文件存在哪里 String initialize = MMKV.initialize(this); System.out.println("MMKV INIT " + initialize...mmkv; public MVUtils() { mmkv = MMKV.defaultMMKV(); } public static MVUtils getInstance
MMKV 开源当日即登Github Trending日榜,三日后荣登周榜。MMKV 在腾讯内部开源半年,得到公司内部团队的广泛应用和一致好评。...MMKV 功能 MMKV 优点 高效 MMKV 使用 mmap 来保证内存与文件的同步, 底层使用 protobuf 来存储数据, 深入挖掘了操作系统的潜力来达到最高的性能。...MMKV 使用了 AES CFB-128 算法来加密/解密。我们选择 CFB 而不是常见的 CBC 算法,主要是因为 MMKV 使用 append-only 实现插入/更新操作,流式加密算法更加合适。...MMKV 性能 iOS 性能对比 我们将 MMKV 和 NSUserDefaults 进行对比,重复读写操作 1w 次。...Android 性能对比 我们将 MMKV 和 SharedPreferences、SQLite 进行对比, 重复读写操作 1k 次。相关测试代码在 Android/MMKV/mmkvdemo/。
出现的意义 MMKV的出现是为了替代SharedPreferences的轻量级存储解决方案。SharedPreferences需要被替换的原因主要是存在下述问题: 1....读写方式:内存映射MMAP MMKV基于内存映射MMAP,下面主要介绍内存映射相关内容: 1.1 定义 Linux通过将一个虚拟内存区域与一个磁盘上的对象关联起来,以初始化这个虚拟内存区域的内容,这个过程称为内存映射...数据存储方式:Protobuf MMKV的序列化/反序列化使用 protobuf 实现,其采用了以 T - V 方式对数据进行二进制数据流存储,空间占存少、数据量精简,能以最少的数据量能表示最多的信息。...至此,关于微信团队开源的轻量级存储方案:MMKV 讲解完毕。...总结 本文全面介绍了MMKV的相关知识,接下来的文章,我将继续讲解MMKV相关知识,感兴趣的读者可以继续关注Carson带你学Android开源库系列文章: Carson带你学Android:主流开源图片加载库对比
MMKV源码分析 初始化 / MMKV.initialize(this); 在MMKV的整套流程中,MMKV的初始化起着承上启下的作用。...MMKV的内部结构 MMKV::MMKV(const string &mmapID, int size, MMKVMode mode, string *cryptKey, string *relativePath...文件格式的选择: 其实这是解析时候的事情了,这一段的论证来源于 MMKV 原理[1],protobuf作为MMKV最后的选择方案在性能和空间占用上都有不错的表现。...参考资料 MMKV官方文档[3] 参考资料 [1] MMKV 原理: https://github.com/Tencent/MMKV/wiki/design#mmkv-原理 [2] MMKV for.../Tencent/MMKV/wiki
第一步:开源库导入 implementation 'com.tencent:mmkv-static:1.1.2' 第二步:使用 // 1....自定义Aapplication public void onCreate() { super.onCreate(); MMKV.initialize(this); } // 2....调度使用 // 和SharedPreferenced一样,支持的数据类型直接往里面塞即可 // 不一样的地方,MMKV不需要自己去做一些apply()或者是commit()的操作,更加方便 MMKV kv...w=889&h=803&f=png&s=150991] 不论是单线程还是多线程,MMKV的读写能力都远远的甩开了SharedPreferences&SQLite&SQLite+Transacion。...不过下面一句话仅代表了我的个人意见,也是为什么我只写SharedPreferences和MMKV两者比较的原因,因为我个人认为SQLite和他们不太属于同一类产品,所以比较的意义上来说就趋于普通。
MMKV源码分析 初始化 / MMKV.initialize(this); 在MMKV的整套流程中,MMKV的初始化起着承上启下的作用。...mkPath(g_rootDir); } 对象实例获取 / MMKV.defaultMMKV() public static MMKV defaultMMKV() { // 可以设置为多进程模式...MMKV的内部结构 MMKV::MMKV(const string &mmapID, int size, MMKVMode mode, string *cryptKey, string *relativePath...文件格式的选择: 其实这是解析时候的事情了,这一段的论证来源于 MMKV 原理,protobuf作为MMKV最后的选择方案在性能和空间占用上都有不错的表现。..., jlong handle, jstring oKey, jboolean value) { MMKV *kv = reinterpret_cast(handle); // 1
MMKV-Kotlin 在底层需要依赖并调用 MMKV,对上希望暴露与 MMKV 类似的 API 并做一些符合语言特性的封装。...4.2 MMKV 类型 在 MMKV 的 Java 与 Objective-C 版本中,MMKV 类型是具体 CRUD 功能的实现类。...我们需要在 common 层声明 MMKV 类型(为避免同名带来的混淆,我们将 common 层的 MMKV 类型命名为 MMKV_KMP),并且具体实现在各平台的 source set 中,MMKV ...若 MMKV 或 Kotlin 进行了升级,MMKV-Kotlin 未来都会进行跟进升级,请使用者确保 MMKV-Kotlin 依赖的 MMKV 或 Kotlin 版本与您使用的版本兼容。...Tencent/MMKV MMKV-Kotlin https://github.com/ctripcorp/mmkv-kotlin MMKV-Kotlin 跨进程测试的 Service https://
MMKV最新源码托管地址:https://github.com/Tencent/MMKV 2、MMKV 源起 在微信客户端的日常运营中,时不时就会爆发特殊文字引起系统的 crash(请参见文章:《微信团队分享...更详细的设计原理参考MMKV 原理。...文件; 添加头文件#import ,就可以愉快地开始你的 MMKV 之旅了。...快速上手: MMKV 的使用非常简单,无需任何配置,所有变更立马生效,无需调用synchronize: MMKV *mmkv = [MMKV defaultMMKV]; [mmkvsetBool:...("mmkv root: "+ rootDir);//……} MMKV 提供一个全局的实例,可以直接使用: importcom.tencent.mmkv.MMKV;//……MMKV kv = MMKV.defaultMMKV
MMKV 是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。...MMKV 使用 快速上手 MMKV 提供一个全局的实例,可以直接使用: ? 可以看到,MMKV 在使用上还是比较简单的。如果不同业务需要区别存储,也可以单独创建自己的实例: ?...可见 MMKV 性能远远优于 iOS 自带的 NSUserDefaults。...对比之下,MMKV即使触发数据重整,也保持了性能的稳定高效。...---- 目前 MMKV 已经在鹅厂内部开源(http://git.code.oa.com/wechat-team/mmkv),反馈比较好的话会考虑对外开源。
领取专属 10元无门槛券
手把手带您无忧上云