美文网首页
客户端数据缓存策略

客户端数据缓存策略

作者: 络雨凉 | 来源:发表于2021-09-16 16:57 被阅读0次

    为什么需要缓存?

    客户端与服务端交互需要时间,用户每次进行页面操作都需要等待,体验很差。

    因此,对一些变化较小、常用以及页面初始化的数据,可以做一些缓存机制,这样不仅能缓解服务端的压力,也能保证客户端体验的流畅性。

    缓存种类

    1、内存缓存

    以变量的形式存储数据,消耗内存空间来提升加载速度。由于客户端内存有限,分配给单个应用的内存则更少,所以内存缓存需要严格控制大小。一些常用且较小的数据比如用户信息等可以使用内存缓存存储,此外为了保证缓存的可靠性,内存缓存还会配合本地缓存实现二级缓存。

    2、本地数据库缓存

    客户端建立嵌入式数据库,可以携带初始化数据,也可在使用过程中往数据库添加数据,适合离线存储规模较大的列表数据。

    3、本地键值对缓存

    使用非关系型数据库或者平台独有的本地键值对存储库如Android中的SP进行键值缓存。特点是不用建立数据表,即存即用,适合用来做普通数据的缓存。

    4、文件缓存

    应用中占空间较大的数据项以文件形式直接存储在本地,一般用户缓存图片、网页等。

    常用缓存算法

    1、LFU(访问次数排列)

    根据数据的历史访问频率来淘汰数据,其核心思想是“如果数据过去被访问多次,那么将来被访问的频率也更高”。

    如果存储空间很大,则LFU具有较大优势。

    但LFU对新加入的数据不太友好,随着总体数据的访问次数增大,新加入的数据难以短时间追上老数据,从而轻易被淘汰。

    2、LRU(最近访问排列)

    根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。

    LRU以最近访问排列,对新数据较为友好,并且也照顾到了旧数据,是较为理想的有限空间缓存算法。

    当存在热点数据时,LRU的效率很好,但偶发性的、周期性的批量操作会导致LRU命中率急剧下降,缓存污染情况比较严重。

    3、FIFO(最新加入排列)

    最先进入的数据,最先被淘汰。只要使用队列数据结构即可实现。那么FIFO淘汰算法基于的思想是”最近刚访问的,将来访问的可能性比较大”。

    FIFO对新数据友好度极大,对旧数据友好度极差。

    使用频率分析

    根据数据使用频率的不同,需要应用不同的缓存策略。

    1、只使用一次

    客户端只使用一次的数据,如搜索结果,这种情况则无需使用缓存,服务端直接返回数据给界面显示即可,请求过程中客户端需要显示加载框等待返回结果。

    2、不常使用

    这类数据很多,即有重复显示的需要,又无需频繁加载。不常用的数据可以先存进本地缓存,再通知显示界面更新界面。

    3、经常使用

    经常使用的数据同样需要先存进本地缓存,并且在本地缓存的基础上建立了一层内存缓存,以缓解频繁访问本地缓存产生的效率问题。

    时效性分析

    1、频繁变化

    对于频繁变化的数据如资讯、消息等,只需分配一个键值对空间用来存储请求到的数据,每次刷新页面都会重新发起请求,而这类缓存的目的则主要为了下次进入界面时能够立即显示数据。

    2、较少变化

    有些数据变化周期很长,比如我国的行政区划,这类数据可以设置一个更新间隔,超过间隔时间再发送更新请求即可。

    3、永远不变

    这类情况较少,比如某图书系统的图书信息等,存进去的数据无需更新,这类情况则不用发送更新请求。

    使用场景分析

    1、登录

    使用单独空间缓存账号数据,登录成功之后,建立与账号相关联的缓存空间,然后将用户信息如名称、token、头像等存入内存+本地二级缓存。

    2、首页信息

    首页信息一般变化频繁且不需要频繁加载,所以可以直接用本地缓存。

    首次进入:显示加载框,发送请求。请求成功后将数据存入本地缓存,再通知界面从本地缓存更新数据。

    非首次进入:从本地缓存显示数据,再静默发送更新数据的请求,请求成功后将数据存入本地缓存,再通知界面从本地缓存更新数据。

    3、列表

    列表数据变化频繁,缓存的目的只是为了下次进入列表界面不用等待,所以无论是单页列表还是分页列表,只需要缓存列表第一页的数据即可。缓存逻辑与首页信息一致。

    4、列表项详情

    由于列表项众多,对每一项的详情都进行键值对缓存不太现实,所以一般不用进行缓存。如有缓存需要,也可以建立数据库,每访问一次详情都往数据库插入数据,下次进入同一项详情就可以调用缓存。但这样一来本地数据会越来越多,很多数据使用过一次就再也用不上了,产生大量冗余。所以,这里需要进行一些优化,可以使用前面介绍的缓存算法如LRU对无用数据进行淘汰,也可设置定期清理程序对数据进行清理。

    5、省市区选择

    因为省市区使用时需要联动,一般会同时加载,所以建议用本地键值对直接存储,无需使用数据库。

    由于省市区信息并不固定,所以还需要为每一个省市区数据设置一个版本号,定期检测服务端是否有新数据更新。

    6、搜索候选

    搜索功能一般需要保存历史搜索记录,而搜索历史的面板空间有限,所以这是一个典型需要使用缓存算法的功能。

    搜索历史推荐LRU算法,新搜索的数据先去缓存中匹配是否存在,如果存在,移动至顶端,如不存在,则直接插入最顶端,缓存装满后删除尾端数据。

    相关文章

      网友评论

          本文标题:客户端数据缓存策略

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