• 欢迎来到本博客,希望可以y一起学习与分享

redis分页缓存

笔记 benz 4周前 (09-22) 11次浏览 0个评论 扫描二维码
文章目录[隐藏]

前言

使用Redis来做分页缓存,只适用于简单的分页的场景(例如:list.php?page=1&limit=10)如:文章列表,评论列表。如果是带有复杂查询的查询(例如:list.php?page=1&limit=10&order=desc&field=id&name=李),则不适合使用Redis做分页缓存,只能走MySQL查询。

简单分页+按字段排序(list.php?page=1&limit=10&order=desc&field=id)也可以使用分页缓存吗?
可以,需要把排序的数据全部放到Redis中,只用一部分数据的排序是不准确的。对于数据量小的数据放到Redis还可以,如果数据量比较大,则需要一次性(或分批)向MySQL查询大量,并存储到Redis,且会消耗大量内存。

传统分页

一般分页做缓存都是直接查找出来,按页放到缓存里,但是这种缓存方式有很多缺点。如缓存不能及时更新,一旦数据有变化,所有的之前的分页缓存都失效了。比如像微博这样的场景,微博下面现在有一个顶次数的排序。这个用传统的分页方式很难应对。

zset+hash做分页缓存

存数据
zset存放id:score可以存修改时间戳,member可以存id

hash存放具体数据:key是自定义key名:id,value是数据。

取数据
先对zset排序,取出id集合:

再遍历id集合,去hash取出具体数据

进阶-在以上基础,使用sort来排序

Go 示例代码(基于Gin框架)

参考

redis缓存分页思路
Redis Pagination
【Redis】如何使用sort对hash进行排序


文章 redis分页缓存 转载需要注明出处
喜欢 (0)

您必须 登录 才能发表评论!