背景
当前应用中,一方面是有国外服务器,导致客户端请求数据慢,loading时间过长;另一方面是客户端页面跳转导致的多次频繁请求,很是影响用户体验和影响服务器性能,所以需要对客户端的请求做缓存处理,以便达到减轻服务器压力(减少重复请求次数)和对用户的友好体验(添加数据库缓存)的目的。
目标
- 减轻服务器压力
- 提高用户体验
方案
- 针对每个接口设置不同的缓存策略(缓存时间)
- 请求数据时先查询数据库,有数据就返回界面,同时网络请求,数据回来返回界面,更新数据库?
- 请求数据先查询数据库,判断是否过期,没过期直接返回界面,否则请求网络,再刷新界面和更新数据库
- 没有网络就直接返回数据库数据。
根据接口细化
完全不需要缓存
- sendAddress (创建钱包)
- sendPushInfo, unsubscribePushInfo, updatePusheToken(推送相关信息)
- getVerifyCode, versifyPhoneAndGetInviteCode, JsUrl, verifyTicket, verifyInviteCode(验证码信息相关)
- createNewId, restoreProfile, updateProfile,updateCellphone (创建,恢复,更新等接口)
- becomeCandidate, reapplyCandidate, quiteCandidate, updateNodeInfo(对节点动作的操作结果,只返回基础成功与否的接口)
- 退票,加减仓相关
按照条件添加永久缓存
- 红包详情
- 交易详情
较长时间缓存,服务端可做的缓存处理接口(规则等信息)
- fetchUpdateInfo (App更新信息)
- fetchThirdAppInfo, getHepDapp (Dapp 详细信息和Dapp 列表信息)
- getNewIdCondition, getVoteCondition, getNodeCondition,getRedPacketCondition
一天内时间的缓存
- 获取挖矿信息,奖励token信息,奖励 nf 信息等
- 轮次信息
- 获取全网的nf
要最新的数据,同时也要缓存的(短暂缓存,防止用户频繁刷新)
- 获取用户的ProfileInfo
- 获取公告信息 getAnnouncement
- 红包的收发记录
- 交易记录
技术调研
RxCache:
使用注解方式对接口设置缓存策略,目前测试支持GET请求,(别人有参数一样的POST请求,但是自己测试post请求是缓存了,但是没有读取),缓存的结果到一个文件里面,使用LruDiskCache 算法处理缓存文件夹大小,还可以定制接口是否强制使用缓存,如果能忽略参数获取缓存结果这个方案还不错。
OkHttp3 设置 CacheInterceptor:
手动处理请求流程,在请求过程中,根据设置好的缓存策略和有无网络情况读取数据库或者网络数据,如果有缓存返回缓存数据,同时去网络请求,回来结果再返回数据,不过前台界面不好控制数据来源..