1,现状
(1)概述:目前网站列表页面的过滤条件是:1 级分类、最新/人气,我们采用的是 redis 缓存 id 和时间,同时配合页面静态缓存。 (2)具体:建立了多个 redis 有序集 (Sorted set),键分别是“latest”,“hot”,“latest:#{category_id} ”,“hot:#{category_id} ”。查询是通过 redis 的 ZRANGE/ZREVRANGE 方法实现分页和时间排序,获取 id 之后再从 mongodb 中查询具体信息。
2,新需求遇到的问题
(1)概述:丰富过滤条件,如图:
(2)解决:因为是多条件组合查询 + 翻页,所以不能使用 redis 做缓存。想到给 mongodb 建立索引,通过分析得到为了适应各个条件组合需要建立约 30 个索引 (排序也要建立索引)。这样有 2 个问题:一是会增大索引大小,占用内存,目前索引已经 10G;二是索引多了,影响写入速度。
所以,请教大家,对于这种多组合的查询列表页,大家一般如何缓存?