HCKV---手动实现一个MMKV框架

 

整体学习流程梳理

  • 首先是学习如何创建一个可以供其他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)