• 缓存策略


    1.全缓存
    很多的时候,在大量数据展示的过程中,我们总是喜欢分页展示,那个,如何设计这个分页的。

    当然,我们完全可以一页页的去数据库中获取相应的数据,但是很多的时候,我们不是这样做的,例如,每页数据有20条,我们可能会实现预加载100条数据在缓存中,每次展示将一页的数据进行展示。

    下面,就开始说说这个“全缓存”。

    接着上面的分页的例子,我们预先取来100条,然后用户就不断的翻页,此时,如果用户翻到了第6页,或者后面,此时,我们没有缓存后面的数据,此时,我们就开始再次去获取100条数据,那么此时,在缓存中就有了200条,并且是从1到10页的。以此类推,我将之定义为“全缓存“,因为最后的结果将会缓存用户查看的所有数据。(其实,很少有用户想翻到后面的十几页去的)

    这种策略非常常用,但是不可滥用,要针对不同的类型的应用,并且还得看数据变化的频率。因为稍不注意,就是内存使用过多了。

    这种方式最理想的利用场景在站点没有搜索功能,并且通过类似Tag标签来代替查询的项目中。如图的例子:
    <ignore_js_op> 

    现在的很多的站点不能没有搜索功能,当然,我们可以酌情的考虑使用这种方式。我们后面会介绍将这个方法与其他的结合起来,构造更加智能的策略。 

    2.半缓存
    其实这个缓存策略,是这样的:

    例如用户在查询某些数据的时候,我们把前几页的数据,假设100条,每页是20条,我们就把前5页的数据缓存起来,如果用户翻页翻到了第6页,或者更后面,那么,我们就单独的去取那一页的数据,但是取出来之后不缓存,
    之所以这么做,主要是:很少有用户那么有耐心一直的翻页,很多时候,用户看前3页的数据就了不得了。

    这种缓存的策略,应该非常实用,如果站点的搜索功能是主要的功能,那么,这个策略可以在内存和性能方面取得平衡。

     
    3.基于统计的缓存

    顾名思义,就是收集一定的信息,然后做出分析,利用分析的结果来有效的缓存数据。

    这里,我以电子商务为例子,例如用户在搜索某产品,那么,我们就把每次用户输入的一些条件的关键字收集起来进行分析,然后对关键字出现频率进行统计分析,
    之后,就得出那些出现频率比较高的关键字,然后就把这些关键字对应的产品缓存起来,至于如何缓存这些数据,这个时候,完全可以结合之前的“全缓存”和“半缓存“策略一起使用。

    那么,当用户在查找产品的时候,如果他输入的关键字在缓存中的缓存键之中,那么,就把数据返回给用户。

    这里,我们完全可以发挥更多的思考:例如,更加关键字出现的不同频率设置不同的缓存时间。那么实现起来可能稍微麻烦一点。 

     

  • 相关阅读:
    SpringBoot笔记
    SpringBoot面试篇
    多线程篇
    Tomcat篇
    Redis篇
    Nginx篇
    JVM篇
    MySQL篇
    python ETL工具 pyetl
    python通用数据库操作工具 pydbclib
  • 原文地址:https://www.cnblogs.com/toxiaonan/p/2934612.html
Copyright © 2020-2023  润新知