看了一遍RxCache的源码,以及一些相关的RxCache源码分析文章,有所心得,大致走一下源码分析的整个流程。
这里是GitHub项目地址。
RxCache是二级缓存,在内存和磁盘两处都做了缓存,所以索性先从Action这个抽象类开始分析。
abstract class Action {
...
protected final Memory memory;
protected final Persistence persistence;
public Action(Memory memory, Persistence persistence) {
this.memory = memory;
this.persistence = persistence;
}
...
}
Action封装了Memory(代表内存),Persistence(代表磁盘)两个接口,
protected String composeKey(String providerKey, String dynamicKey, String dynamicKeyGroup) {
return providerKey
+ PREFIX_DYNAMIC_KEY
+ dynamicKey
+ PREFIX_DYNAMIC_KEY_GROUP
+ dynamicKeyGroup;
}
从Action的composeKey方法可以看出很多,如果把缓存的标识叫做key,那么能组成(compose)它的就是三个关键要素,providerKey,dynamicKey,dynamicKeyGroup。其实RxCache的使用过程就是在接口方法上打上这三个要素的注解,用来确定是为这个接口方法获取的数据作缓存。
然后getKeysOnMemoryMatchingProviderKey方法可以根据providerKey在Memory查找缓存,还有getKeysOnMemoryMatchingDynamicKey根据providerKey,dynamicKey查找,getKeyOnMemoryMatchingDynamicKeyGroup方法因为参数中三个要素条件都有,不需要查找,直接返回组成的key。
Action类应该很容易理解,接下来说一下它的实现类,分别是EvictExpirableRecordsPersistence,EvictExpiredRecordsPersistence,EvictRecord,RetrieveRecord,GetDeepCopy,SaveRecord。