Skip to content
Tony Shen edited this page Nov 6, 2021 · 28 revisions

RxCache

RxCache 是一款支持 Java 和 Android 的 Local Cache 。目前支持内存、堆外内存、磁盘缓存。

Feature:

  • 支持二级缓存:Memory、Persistence
  • 各个缓存可以拥有有效时间,超过时间缓存会过期
  • Memory 默认支持 FIFO、LRU、LFU 算法的实现
  • Memory 支持 Guava Cache、Caffeine、MapDB、OHC、Chronicle-Map 的实现
  • Memory 支持堆外内存(off-heap)
  • Persistence 默认使用 Gson 实现对象的序列化和反序列化
  • Persistence 支持使用 FastJSON、Moshi、Kryo、Hessian、FST、Protobuf 实现对象的序列化和反序列化
  • Persistence 的 AbstractConverter 拥有加密功能,默认使用 AES 128、DES 算法进行加密
  • 支持显示缓存的信息,包括 Memory 缓存使用的统计数据,Persistence 使用的类型和 Converter 的类型
  • 支持缓存 key 同步删除、异步删除的策略
  • 支持 Kotlin, 特别是使用 kotlin extension 模块,可以规避范型擦除
  • 支持 Kotlin Coroutines
  • 支持 Result
  • 使用 Builder 模式可以生成复杂对象的 Type
  • 线程安全
  • 支持 RxJava 3、RxJava 2
  • 支持 Retrofit 风格使用缓存

RxCache 的设计:

下图是 rxcache-core 模块的 uml 类图

RxCache 包含了两级缓存: Memory 和 Persistence 。

Memory 的默认实现 FIFOMemoryImpl、LRUMemoryImpl、LFUMemoryImpl 分别使用 FIFO、LRU、LFU 算法来缓存数据。

RxCache 还有 Guava Cache、Caffeine 单独的模块来实现 Memory。它们都是成熟的 Local Cache,如果不想使用默认的缓存实现,完全可以使用这些模块成熟的替代方案。

Persistence 的接口跟 Memory 很类似。考虑到持久层可以包括 Disk、DB,于是分别单独抽象了 Disk、DB 接口继承 Persistence。