Mmkv——存取速度比存取速度比SharedPreferences快数十倍的本地缓快数十倍的本地缓
存工具存工具
MMKV 是基于 mmap 内存映射的移动端通用 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。
MMKV 原理原理
内存准备内存准备
通过 mmap 内存映射文件,提供一段可供随时写入的内存块,App 只管往里面写数据,由操作系统负责将内存回写到文件,
不必担心 crash 导致数据丢失。
数据组织数据组织
数据序列化方面我们选用 protobuf 协议,pb 在性能和空间占用上都有不错的表现。
写入优化写入优化
考虑到主要使用场景是频繁地进行写入更新,我们需要有增量更新的能力。我们考虑将增量 kv 对象序列化后,通过append拼
接到内存末尾。
空间增长空间增长
通过append实现增量更新带来了一个新的问题,就是不断 append 的话,文件大小会增长得不可控。我们需要在性能和空间
上做个折中。
MMKV 性能性能
单进程性能单进程性能
MMKV 在写入性能上远远超越 SharedPreferences & SQLite,在读取性能上也有相近或超越的表现(每组操作重复1k 次,时
间单位: ms)。
多进程性能多进程性能
多进程下,MMKV 无论是在写入性能还是在读取性能,都远远超越 MultiProcessSharedPreferences & SQLite, MMKV 在
Android 多进程 key-value 存储组件上是不二之选(每组操作重复1k 次,时间单位: ms)。
Mmkv配置:
在app的build.gradle里面添加依赖:
dependencies {
......
implementation 'com.tencent:mmkv:1.0.24'
implementation 'com.getkeepsafe.relinker:relinker:1.4.0'
......
}
Mmkv的封装:
public class MmkvTools {
private static MmkvTools instance = null;
private MMKV mmkv = null;
/**
* TODO:获取操作对象
* @return
*/
public static MmkvTools getInstance() {
if (null == instance) {
synchronized (MmkvUtils.class) {
instance = new MmkvTools();
}
}
return instance;
}
/**
* TODO:初始化MMKV
* @param app