做网络层缓存的思路和总结

作者: TEASON | 来源:发表于2017-05-10 13:01 被阅读816次

做网络层缓存的思路和总结(基于XTFMDB)

  • 前言:
    我们知道. 微信微博都是大量使用缓存的app.在没有网络的情况下. 用户依然可以浏览历史记录 .这种体验很好, 而且能节省用户的手机流量.
    我自己仿照写了一个缓存机制.结合在网络层.
    这篇文章谈谈我实现的想法. 在应用里去做大量的缓存的时候 . 到底怎么做比较合适 ? 以及我为什么这么做 .
    这篇文章谈谈思路.
层次关系
struct.png
NSCache & NSURLCache

这是一种思路. 优点是有内存的缓存. 也能做磁盘的缓存 . 键值对的存储形式. 访问速度更快. SDWebImage里用了内存的缓存提高图片读写速度. 说一下缺陷, 是看不到整个保存的数据结构什么样. 追踪复杂的数据结构的时候不太方便. 如果是运算量大.但结构单一的数据类型.我会用NSCache. 结合现在需求的场景. 我们要做对整个app数据的缓存. 这种肯定不适合了.


page_2.png
用数据库

表结构一目了然,出问题了追起来也容易的多,数据不会丢失,性能也不慢(有差距,但已经可以忽略不计). 综上,很适合我的需求. 所以决定了, 用数据库. 那么问题来了. 怎么去设计这个数据库的表结构呢 ?

方案一.

沿袭服务端的表结构.照抄一个和后台一模一样的数据库建模.
优点是,结构很清晰.但工作量太大.而且有一些数据你只需要保存你当前用户的,和后台一模一样设计并没有什么意义.
当然不排除有的时候对一些数据要深度处理.这种方案还是有优势.

方案二.

只对请求返回的response做缓存 .表结构以键值为主去保存 .
在原有的网络架构中在加一层做缓存处理. 每个请求拼上参数作为一个唯一性的字段做主键. 就能保证不重复保存了.
最大的优点在于.不需要考虑复杂的数据结构.只针对每个请求的response.
当然,还需要不同的缓存策略. 各种请求的需求不同. 有的不需要缓存只需要在无网状态下返回上一次的数据就行了(实时/频繁更新). 有的只请求一次后面每次都返回缓存的(千年不变). 有的按时间判断超时与否再做操作(判断超时).

缓存逻辑
page_1.png
如何建模

上一篇博客XTFMDB. 缓存表XTResponseDBModelXTFMDB这个项目基础上开发. 把每个请求拼成一个URL当成UNIQUE的KEY. response当成VALUE去存储. 当然还有一些常规字段.

相关文章

  • 做网络层缓存的思路和总结

    做网络层缓存的思路和总结(基于XTFMDB) 前言:我们知道. 微信微博都是大量使用缓存的app.在没有网络的情况...

  • KingFisher 开篇

    缓存 : 内存缓存、磁盘缓存网络层 : download dataUI : placehold, 转场动画, 指示...

  • Android异步加载 缓存第一章

    今天要讲的缓存策略(缓存层分为三层:内存层,磁盘层,网络层)。当我们第一次打开应用获取图片时,先到网络去下载图片,...

  • iOS数据库离线缓存思路和网络层封装

    自己整理看

  • iOS数据库离线缓存思路和网络层封装

    一直想总结一下关于iOS的离线数据缓存的方面的问题,然后最近也简单的对AFN进行了再次封装,所有想把这两个结合起来...

  • apache缓存

    一、详解浏览器缓存机制 对于,如何说明缓存机制,在网络上找到了两张图,个人认为思路是比较清晰的。总结时,上图。 这...

  • 自己设计实现图片加载器

    这里不贴大段的代码了,单单列出思路,和一些解决思路。 我们的图片加载过程,可以引入缓存,我们设计一种两层缓存的架构...

  • 微服务多行查询之缓存策略

    在上一篇 缓存设计的好,服务基本不会倒 介绍了db层缓存,回顾一下,db层缓存主要设计可以总结为: 缓存只删除不更...

  • #Android# Picasso,始终专注图片加载

    知识框架(脑图) 出现背景 多图加载和性能之间的平衡 考虑网络请求、缓存和开发效率 解决思路 封装网络请求、图片加...

  • Bitmap的缓存结构设计

    1. 整体思路设计 采用三级缓存结构:内存-磁盘-网络,缓存使用的是LruCache算法,最近最少使用缓存算法 内...

网友评论

    本文标题:做网络层缓存的思路和总结

    本文链接:https://www.haomeiwen.com/subject/dpnwtxtx.html