整体学习流程梳理
- 首先是学习如何创建一个可以供其他APP导入的库
- 梳理MMKV的源码,观测其实现的关键代码
- 学习mmap,将文件映射到内存上
- 学习NDK和C++以便使用高性能IO
- 学习protobuf编码
预期目标
- 实现最基本的Key-Value的存储模式
- 数据加密
- 数据校验
- 数据容错
- 线程同步,进程同步
结构设计
- java层
- 全局初始化类
- 获取HCKV方法
- 数据存储方法
- 数据读取方法
- Native层
- 全局初始化
- HCKV全局缓存工具
- 内存映射文件
- 获取HCKV
- Kay-Value缓存容器
- 数据存储
- 读写Buffer
- 数据读写
- 写入辅助类
- 读取辅助类
- 全局初始化
MMAP
mmap是用户存储
和内核存储
中沟通的桥梁,可以实现页缓存和用户缓存区共享
将内存映射到文件,实现文件磁盘地址和进程虚拟地址存在对应关系
文件可以采用指针的方式读写操作这一块内存,系统会自动回写脏数据到文件磁盘上
优点
- 减少系统api调用
- 减少了数据拷贝:普通的读操作,数据要经过2次Copy,mmap只用从磁盘拷一次
- 高可靠性
使用场景
- 用户日志缓存
- 跨进程同步通信(Binder就是基于mmap实现的)
- 缓存用户信息(类似于Cookie)