美文网首页
缓存的几种维护机制

缓存的几种维护机制

作者: _一苇航之_ | 来源:发表于2018-05-22 23:30 被阅读0次

    前言

    当某个资源被频繁查询时,可以通过加缓存来提高频繁访问的性能。当资源过时等情况发生后需要有一种机制来维护缓存,这篇文章总结了几种常见的缓存的维护机制。

    应用程序主导机制

    这种机制的逻辑如下:

    缓存的增加:应用程序首先从缓存中获取数据,如果没有获取到,则到持久化的数据库中获取,获取成功后,更新缓存。

    缓存的失效:应用程序更新完数据库后,再去使对应的缓存失效。

    缓存的命中:应用程序从缓冲中获取到数据,直接返回。

    这种机制的缺点:应用程序需要维护两套数据存储系统,一套数据库,一套缓存,需要实现两套不同的数据获取逻辑。这对于应用程序的职责来说是比较混乱的,应用程序应该专注于业务,而不是缓存的维护。

    缓存部分主导机制

    这种机制的逻辑如下:

    缓存的增加:应用程序从缓存中获取数据,缓存如果发现没有应用程序需要的数据,则到持久化的数据库中获取,获取成功后,更新缓存,并返回结果给应用程序。

    缓存的失效:应用程序更新数据时,如果没有命中缓存,则直接去更新数据库。如果命中了缓存,则更新缓存,然后由缓存再去更新数据库。

    缓存的命中:应用程序从缓冲中获取到数据,直接返回。

    这种机制的缺点:对于应用程序来说,再更新数据时会去判断是否命中缓存,如果没有还需要去操作后台的数据库。

    缓存完全主导机制

    这种机制的逻辑如下:

    缓存的增加:应用程序从缓存中获取数据,缓存如果发现没有应用程序需要的数据,则到持久化的数据库中获取,获取成功后,更新缓存,并返回结果给应用程序。

    缓存的失效:应用程序更新数据时,直接更新缓存,缓存如果发现没有命中缓存,则直接去更新数据库。如果命中了缓存,则更新缓存,然后再去更新数据库。

    缓存的命中:应用程序从缓冲中获取到数据,直接返回。

    如果在大并发场景下,这种机制是有很大的好处的。

    例如,当更新数据的请求很多时,缓存更新数据库可以采用异步批量的方式来进行。缓存可以合并对同一个数据的多次更新操作,并且可以通过某些方法来批量高效率地进行数据的更新。

    但是因为异步更新的关系,也会随之带来数据不是强一致性的问题。

    缓存设计时几个需要关注的点

    1、不要把所有的数据都加载到缓存中。

    所有的数据都加载到缓存中没有必要,因为频繁访问的数据就可能在20%左右。内存要比磁盘贵多了。

    2、缓存需要有一个失效机制。

    任何数据都有过期时间的,所以缓存需要有一个失效机制。失效时长需要有一个衡量,太长或者太短都不行,太长会导致数据不一致,并且太久没人访问的数据也会缓存起来,耗费内存资源,太短会导致缓存组件的效率降低。一般可以采取LRU机制,即把最不活跃长时间没有访问的数据清除出缓存。

    3、缓存的代价是牺牲了数据的强一致性。

    任何方案都会有代价的,使用缓存时需要关注业务的特点,有些需要数据强一致性的业务不适合用缓存。

    相关文章

      网友评论

          本文标题:缓存的几种维护机制

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