一、MMKV 是什么
MMKV 是由微信团队开源的一款高效、简单易用的 Key-Value 存储框架,其主要特点有:
- 支持多线程并发读写,存储效率高
- 支持自动序列化, no-compile, no-code,方便易用
- 底层采用 mmap(内存映射) 技术实现,读写效率更高
- 支持 AES 256 位加密
使用 MMKV 可以在不需要数据库的情况下,轻松实现数据的本地缓存。
二、如何使用
MMKV 的使用非常简单,只需要添加依赖之后,即可进行数据的读写。
<!-- 添加依赖 -->
<dependency>
<groupId>com.tencent:mmkv</groupId>
<artifactId>mmkv-static</artifactId>
<version>1.2.2</version>
</dependency>
// 初始化MMKV
MMKV.initialize(this);
// 存储数据
MMKV mmkv = MMKV.defaultMMKV();
mmkv.encode("key", "value");
// 读取数据
String value = mmkv.decodeString("key");
三、支持的数据类型
MMKV 支持以下数据类型的存储:
- String
- int
- long
- float
- double
- boolean
- byte[]
- Set<String>
- 自定义对象
其中,自定义对象需要实现 Parcelable 接口以支持序列化。
四、多线程并发读写
MMKV 支持多线程并发读写,可以在多个线程中同时操作 MMKV 存储的数据。
// 多线程并发写入
ExecutorService executorService = Executors.newFixedThreadPool(5);
for (int i=0;i<5;i++){
executorService.execute(new Runnable() {
@Override
public void run() {
for (int j=0;j<50;j++){
mmkv.encode("key"+j, "value"+j);
}
}
});
}
executorService.shutdown();
executorService.awaitTermination(1, TimeUnit.MINUTES);
// 多线程并发读取
ExecutorService executorService = Executors.newFixedThreadPool(5);
for (int i=0;i<5;i++){
executorService.execute(new Runnable() {
@Override
public void run() {
for (int j=0;j<50;j++){
String value = mmkv.decodeString("key"+j);
Log.d(TAG, "value="+value);
}
}
});
}
executorService.shutdown();
executorService.awaitTermination(1, TimeUnit.MINUTES);
五、mmap技术
MMKV 底层采用 mmap 技术实现,通过将文件映射到进程的地址空间内,可以实现高效的读写操作。
在 MMKV 中,mmap 技术的使用可以优化数据的 I/O 性能,提升存储效率。
六、AES 256 位加密
MMKV 支持采用 AES 256 位加密存储数据,可以有效保障数据的安全性。
// 使用AES 256位加密保存数据
MMKV mmkv = MMKV.mmkvWithID("MyData", MMKV.MULTI_PROCESS_MODE);
byte[] bytes = "secret data".getBytes();
byte[] key = "password".getBytes();
mmkv.encode("key", bytes, key);
// 使用AES 256位加密读取数据
byte[] decodedBytes = mmkv.decodeBytes("key", null, key);
七、总结
Android MMKV 是一个高效、简单易用的 Key-Value 存储框架,实现了多线程并发读写、mmap 技术、AES 256 位加密等多项特性,非常适合进行本地数据的存储。