最近需要实现对网络数据的缓存,通过综合考虑最后决定采用PINCache
作为底层缓存框架,PINCache
是Pinterest的程序员在Tumblr的TMCache
基础上发展而来的,经过Pinterest
的实战考验,无疑是一套优秀的开源缓存框架。
流程图如下:
分析:
*进入页面同时检查是否有缓存和请求网络数据
*如果有缓存,读取缓存,读取缓存的时间大于接口的请求数据的时间就停止读取缓存,反之则刷新UI
*网络数据请求成功的就刷新UI,同时异步缓存
主要代码:
NSString *cacheKey = [TTAPIParamsGenerator cacheKeyGenerator:params methodName:methodName];
RACSignal *cacheSignal = [[[TTOldService cacheManager] cacheObjectForKey:cacheKey] catchTo:[RACSignal empty]];
RACSignal *remoteSignal = [[self rac_PostWithParams:params methodName:methodName] flattenMap:^RACStream *(id value) {
if (value) {
[[TTOldService cacheManager] setObject:value forKey:cacheKey block:^(PINCache * _Nonnull cache, NSString * _Nonnull key, id _Nullable object) {
}];
}
return [RACSignal return:value];
}];
return [RACSignal merge:@[[cacheSignal takeUntil:remoteSignal], remoteSignal]];