偶然在代码中发现一个接口,接口定义说是分页查询,但逻辑实现是Redis。不太理解,Redis怎么分页?后来看到一篇文章,然后了解了。

1、Zrevrange实现

通过SortedSetzrevrange topicId (page-1)×10 (page-1)×10+perPage指令可以实现分页功能。

Redis Zrevrange 命令 - 返回有序集中指定区间内的成员,通过索引,分数从高到底。

参考:Redis Zrevrange 命令_返回有序集中指定区间内的成员,通过索引,分数从高到底

详细了解见原文:在 Redis 中进行分页排序查询 | NiuNiu's Note

注:Zrevrange 命令后面的命令值就是索引值。所以不会有问题。

思考:可能会有一个小问题。如果在分页查询过程中,有新数据插入。那么已有数据的索引值会改变,这样就会查到重复数据或者遗失数据了。

而Zrevrangebyscore,如果将数据插入时间点作为score,那么通过score来划分范围,肯定不会出现数据重复或丢失的情况。

2、Zrevrangebyscore命令实现

另外,我们的代码中使用的是Zrevrangebyscore命令。

这个命令应该只保证每页范围一致,做到不遗漏数据,但不保证每页数据总数一定。

一般不适用于传统每页多少条数据的分页方式,比较适合于瀑布流或者评论那种动态加载数据的方式。

注:Zrevrangebyscore 命令后面的命令值就是分数值。所以有数据总数不一致情况。

3、参考:

  1. 在 Redis 中进行分页排序查询 | NiuNiu's blog

    http://liu-xin.me/2015/11/17/%E5%9C%A8Redis%E4%B8%AD%E8%BF%9B%E8%A1%8C%E5%88%86%E9%A1%B5%E6%8E%92%E5%BA%8F%E6%9F%A5%E8%AF%A2/

【Redis】redis分页查询理解的更多相关文章

  1. 分页查询和redis

    问题 我在做论坛的是时候遇到了如下的问题.论坛里可以有很多的主题topic,每个topic对应到很多回复reply.现在要查询某个topic下按照replyTime升序排列的第pageNo页的repl ...

  2. hbase+springboot+redis实现分页

    实现原理: 1.读取hbase数据每页的数据时多取一条数据.如:分页是10条一页,第一次查询hbase时, 取10+1条数据,然后把第一条和最后一条rowkey数据保存在redis中,redis中的k ...

  3. redis实现分页

    redis实现分页功能,主要是将数据缓存起来,无需频繁查询数据库,减少数据库的压力. 适用场景:单用户操作列表界面分页,如博客列表. 缺点:不可模糊查询,缺少灵活性. 封装类: class XgRed ...

  4. [redis]redis实现分页的方法

    每个主题下的用户的评论组装好写入Redis中,每个主题会有一个topicId,每一条评论会和topicId关联起来,大致的数据模型如下:{ topicId: 'xxxxxxxx', comments: ...

  5. 为什么 Redis 的查询很快, Redis 如何保证查询的高效

    Redis 如何保证高效的查询效率 为什么 Redis 比较快 Redis 中的数据结构 1.简单动态字符串 SDS 对比 c 字符串的优势 SDS可以常数级别获取字符串的长度 杜绝缓冲区溢出 减少修 ...

  6. 浅谈Redis之慢查询日志

    首先我们需要知道redis的慢查询日志有什么用?日常在使用redis的时候为什么要用慢查询日志? 第一个问题: 慢查询日志是为了记录执行时间超过给定时长的redis命令请求 第二个问题: 让使用者更好 ...

  7. redis缓存分页思路

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

  8. redis设置慢查询日志

    Redis 的慢查询日志功能用于记录执行时间超过给定时长的命令请求, 用户可以通过这个功能产生的日志来监视和优化查询速度. 1.redis生命周期 慢查询发生在第3阶段 2.两个配置 2.1.slow ...

  9. 在nodejs使用Redis缓存和查询数据及Session持久化(Express)

    在nodejs使用Redis缓存和查询数据及Session持久化(Express) https://segmentfault.com/a/1190000002488971

随机推荐

  1. 开源框架AsyncHttpClient使用

    开源框架AsyncHttpClient使用 2013-10-14 15:16:35 分类: Android平台 在大神岩岩的推荐下使用了AsyncHttpClient框架,用过之后感觉还是灰常好用滴. ...

  2. linux任务计划cron

    linux任务计划cron 1.crontab命令任务计划配置文件 [root@bogon ~]# cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/ ...

  3. OSI7层网络模型

    物理层在OSI参考模型中,物理层(Physical Layer)是参考模型的最低层,也是OSI模型的第一层.物理层的主要功能是:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输.物理层的作用 ...

  4. redis windows 下安装及使用

    1.下载redis https://github.com/MSOpenTech/redis 2.解压下载的文档,比如D:\devSoft\redis-2.8.19 redis-benchmark.ex ...

  5. [容器]docker创建镜像

    手动创建: docker run -d -p mynginx:v2 nginx rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest- ...

  6. zooKeeper_《ZooKeeper官方指南》一致性保障

    转 http://ifeve.com/zookeeper-consistency-guarantees/ 本文翻译自<ZooKeeper官方指南>,译者:追云,校对:追云 一致性保障 Zo ...

  7. 安装好Oracle和PLSQLDeveloper后,PLSQLDeveloper登录时没有可选数据库和连接为问题

    1.登录PL/SQL Developer 这里省略Oracle数据库和PL/SQL Developer的安装步骤,注意在安装PL/SQL Developer软件时,不要安装在Program Files ...

  8. VMware虚拟机实用经验总结十一条

    转:http://article.pchome.net/content-948404.html 1.VMware虚拟机实用经验之支持的Guest OS: VMWare支持如下Guest OS:MS-D ...

  9. android studio 中配置androidAnnotation 的新版正确配置

    apply ].processResources.manifestFile resourcePackageName 'com.peiandsky.firstandroidstudio' }}

  10. tp三级联动

    <script type="text/javascript">$(document).ready(function(){  $("#province" ...