缓存策略

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

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

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

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

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

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

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

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

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

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

 
3.基于统计的缓存

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

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

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

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

 

原文地址:https://www.cnblogs.com/toxiaonan/p/2934612.html