Bootstrap

木偶开发日记——Redis实现分页+多条件模糊查询

在写x联帮项目时遇到一个问题:编写获取社团列表接口时,需要加入Redis缓存,但是给分页结果和多条件模糊查询结果添加Reids缓存时应该如何实现呢?于是去搜索了一些实现方案。

传统分页

传统分页做缓存是直接查找出来,按页放入缓存,这种方式有许多缺点:

缓存不能及时更新,一旦数据发生变化,所有之前的分页缓存都会失效;

同时这种方案无法满足按条件存入缓存。

按照条件分页

如果是按照不同的分页条件来缓存多个key,比如分页查询社团:pageNumber=1&condition=10

缓存的key就可以设置成:community:page:1:condition:10

同样这种方法也存在着一些问题:

缓存的value存在冗余,例如:community:page:1:condition:10中就可能包括了community:page:1:condition:5中的内容(数据没有发生变化的情况下)

当改变查询条件为community:page:1:condition:5时,就会导致缓存未命中,降低缓存命中率;

为了保证数据一致性,需要清理缓存的时候,很难处理,redis的keys命令会对性能造成很大影响,从而导致redis很大的延迟。在生产环境中,需要手动拼接缓存key,如果条件很多,不知道会拼到哪一个条件为止(虽然我的项目没有那么多条件)。

放弃数据一致性,当设置了过期时间时,可能会出现查询第一页命中了缓存,查询第二页的时候未命中缓存,但数据发生了变化,第二页查询返回和第一页相同的结

;