Raf*_*kel 17 language-agnostic pagination lazy-loading redis
TL; DR:以下三个选项中哪一个对Redis进行分页最有效?
我正在实现一个包含多个用户生成的帖子的网站,这些帖子保存在关系数据库中,然后以哈希的形式复制到Redis,其中包含密钥site:{site_id}:post:{post_id}.
我想对Redis执行简单的分页查询,以便在Pinterest风格的界面中实现延迟加载分页(即用户向下滚动,我们向服务器发送Ajax请求,要求下一组帖子).
然后我创建了一个Set来跟踪已发布的帖子ID,其中包含键site:{site_id}:posts.我选择了Sets因为我不希望在集合中有重复的ID,我可以使用简单的SADD快速完成它(不需要检查是否存在id).
好吧,由于套装没有订购,我正在考虑我必须分页的选项的优缺点:
1)使用SSCAN命令对我已经实现的集进行分页
在这种情况下,我可以将返回的扫描光标保留在用户的会话中,然后在下次请求时将其发送回服务器(对于多个用户访问和更新数据库,这似乎不可靠:在某些时候光标将无效并且返回奇怪的结果 - 除非有一些我不知道的警告).
然后我可以使用LRANGE或ZRANGE进行分页.列表似乎是我的用例中性能最高且最自然的选项.它非常适合按日期分页和排序,但我根本无法在不循环所有列表的情况下检查单个项目是否存在.排序集似乎加入了集和列表的优点,但消耗更多的服务器资源.
3)继续使用常规集并将页码存储为密钥的一部分
它会是这样的
site:{site_id}:{page_number}:posts.这是扫描命令实施之前的推荐方法.
所以,问题是:哪一个是最有效/最简单的方法?这里没有列出任何其他推荐选项吗?
"最好的"最好服务主观:)
我建议你使用第二种方法,但绝对使用排序集超过列表.这种类型的工作不仅具有意义(参见参考资料ZRANGE),与复杂的工作相比,它们在复杂性方面也更有效率LRANGE.
| 归档时间: |
|
| 查看次数: |
8540 次 |
| 最近记录: |