确认需求
- 打开App,请求数据时先检查缓存数据是否需要迁移,如果有缓存数据升级,那么就删除原有的缓存数据。
- 如果有缓存数据,判断数据是否过期,如果过期则网络请求,如果没有过期,则返回缓存数据。
- 如果网络请求成功,返回数据,同时更新缓存信息
- 如果网络请求失败,返回缓存信息。
- 如果网络失败,缓存为空,则返回空数据或者抛出异常信息
改动点
- 每次读取数据之后都会处理过期数据,不满足要求4
- 先读缓存,再网络加载
/core/internal/cache/RetrieveRecord.java
<T> Record<T> retrieveRecord(String providerKey, String dynamicKey, String dynamicKeyGroup,
boolean useExpiredDataIfLoaderNotAvailable, Long lifeTime, boolean isEncrypted) {
String composedKey = composeKey(providerKey, dynamicKey, dynamicKeyGroup);
Record<T> record = memory.getIfPresent(composedKey);
if (record != null) {
record.setSource(Source.MEMORY);
} else {
try {
record = persistence.retrieveRecord(composedKey, isEncrypted, encryptKey);
record.setSource(Source.PERSISTENCE);
memory.put(composedKey, record);
} catch (Exception ignore) {
return null;
}
}
record.setLifeTime(lifeTime);
// 删除缓存过期的逻辑
// if (hasRecordExpired.hasRecordExpired(record)) {
// if (!dynamicKeyGroup.isEmpty()) {
// ev