redis实现分页的方法

使用redis进行分页 要完成这个统计任务,我们可以用一个集合记录所有登录过 App 的用户 ID,同时,用另一个集合记录每一天登录过 App 的用户 ID。然后, 再对这两个集合做聚合统计。我们来看下具体的操作。 此时,user:id 这个累计用户 Set 中就有了 8 月 3 日的用户 ID。等到 8 月 4 日再统计时,我们把 8 月 4 日登录的用户 ID 记录到 user:id:20200804 的 Set 中。 接下来,我们执行 SDIFFSTORE 命令计算累计用户 Set 和 user:id:2020080 阅读详情

每个主题下的用户的评论组装好写入Redis中,每个主题会有一个topicId,每一条评论会和topicId关联起来,大致的数据模型如下:
{ topicId: 'xxxxxxxx', comments: [ { username: 'niuniu', createDate: 1447747334791, content: '在Redis中分页', commentId: 'xxxxxxx', reply: [ { content: 'yyyyyy' username: 'niuniu' }, ... ] }, ... ]}
将评论数据从MySQL查询出来组装好存到Redis后,以后每次就可以从Redis获取组装好的评论数据,从上面的数据模型可以看出数据都是key-value型数据,无疑要采用hash进行存储,但是每次拿取评论数据时需要分页而且还要按createDate字段进行排序,hash肯定是不能做到分页和排序的。

那么,就挨个看一下Redis所支持的数据类型:

1、String: 主要用于存储字符串,显然不支持分页和排序。
2、Hash: 主要用于存储key-value型数据,评论模型中全是key-value型数据,所以在这里Hash无疑会用到。
3、List: 主要用于存储一个列表,列表中的每一个元素按元素的插入时的顺序进行保存,如果我们将评论模型按createDate排好序后再插入List中,似乎就能做到排序了,而且再利用List中的LRANGE key start stop指令还能做到分页。嗯,到这里List似乎满足了我们分页和排序的要求,但是评论还会被删除,就需要更新Redis中的数据,如果每次删除评论后都将Redis中的数据全部重新写入一次,显然不够优雅,效率也会大打折扣,如果能删除指定的数据无疑会更好,而List中涉及到删除数据的就只有LPOP和RPOP这两条指令,但LPOP和RPOP只能删除列表头和列表尾的数据,不能删除指定位置的数据,(备注:其实还有 LREM命令可以做到删除,但是非常不方便),而且当存在接口高并发访问时,这个list可能会无限延长,且里面的数据会存在很多重复,这就会影响到正常的业务,所以List也不太适合。

4、Set: 主要存储无序集合,无序!排除。
5、SortedSet: 主要存储有序集合,SortedSet的添加元素指令ZADD key score member [[score,member]…]会给每个添加的元素member绑定一个用于排序的值score,SortedSet就会根据score值的大小对元素进行排序,在这里就可以将createDate当作score用于排序,SortedSet中的指令ZREVRANGE key start stop又可以返回指定区间内的成员,可以用来做分页,SortedSet的指令ZREM key member可以根据key移除指定的成员,能满足删评论的要求,所以,SortedSet在这里是最适合的(时间复杂度O(log(N)))。

所以,需要用到的数据类型有SortSet和Hash,SortSet用于做分页排序,Hash用于存储具体的键值对数据。SortSet结构中将每个主题的topicId作为set的key,将与该主题关联的评论的createDate和commentId分别作为set的score和member,commentId的顺序就根据createDate的大小进行排列。
当需要查询某个主题某一页的评论时,就可主题的topicId通过指令zrevrange topicId (page-1)×10 (page-1)×10+perPage这样就能找出某个主题下某一页的按时间排好顺序的所有评论的commintId。page为查询第几页的页码,perPage为每页显示的条数。
当找到所有评论的commentId后,就可以把这些commentId作为key去Hash结构中去查询该条评论对应的内容。
这样就利用SortSet和Hash两种结构在Redis中达到了分页和排序的目的。

当然,也可以直接只使用SrotedSet类型,而不使用Hash类型,直接将评论存放在member中。
但为什么要将评论和排序放到不同的类型里?其中的好处是,可以对评论设置不同的排序类型,比如按时间的正反序,点赞的正反序,查看次数的正反序等。而这样只需要维护不同的SrotedSet排序,不需要维护多套评论的内容了。

详细代码参考:https://www.cnblogs.com/afeng2010/p/10042790.html

学Simulink--基于机器人与自动化系统的场景实例:六自由度机械臂的逆运动学控制仿真 摘要:本文详细介绍了在Simulink中实现六自由度机械臂逆运动学控制的仿真方法。通过构建包含机械臂模型、路径规划器、逆运动学求解器和控制器等模块的系统,利用MATLAB Robotics工具箱进行建模。文章逐步讲解了从模型创建、轨迹规划、逆运动学求解到控制器设计的完整流程,并提供了性能评估标准。该方法能有效验证逆运动学算法,优化机械臂控制策略,提高操作精度和效率,为机器人自动化系统开发提供实用参考。 阅读详情

相关推荐

手撕代码系列:Conv2D

在实际的神经网络中,每个卷积核都会对应一个偏置值。这意味着如果网络有多个卷积核,每个卷积核的输出都可以加上对应的偏置。

qq_55794606的博客 910

使用Redis的zset集合实现小程序的滚动分页

其中,ZRangeArgs构造函数中的参数表示从集合的起始位置开始返回文档ID,lastDocId表示只返回大于lastDocId且score值小于当前时间戳的文档ID,86400000L表示一天的毫秒数,表示向前滚动一页。

lovoo的博客 2252

使用网分对晶体ESR/L1/C1/C0进行测量计算

Use R&S Vector Network Analyzer test XTAL ESR/L1/C1/C0 測量方法:使用儀器的Port1端口,測量XTAL的S11,通過諧振的參數計算出ESR/L1/C1/C0的值。 實際晶體的等效模型:通常方便晶體分析,使用下圖(b)的等效模型,但實際測量發現晶體存在多個串聯諧振點,實際等效模型更接近(c)。 儀器測量到的S11,其中M...

qq_39138630的博客 2086

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

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

m0_56700707的博客 3314

从AXI到CHI:深入解析基于Credit的流量控制如何优化NoC设计

本文深入解析了从AXI握手式流控到CHI基于Credit的流量控制机制的演进。通过对比传统流控的瓶颈,详细阐述了Credit机制如何通过信用预分配和记账系统,有效解决FIFO气泡、时序收敛等难题,从而优化NoC设计的带宽利用率、降低延迟并提升系统可扩展性。

weixin_29227585的博客 522

一定能解决ROS系统 rosdep update超时问题de简单方法

rosdep update命令使用 1.首先将下面仓库的内容clone到本地 git clone https://github.com/ros/rosdistro.git 记录rosdistro存放地址,例如/home/gec/rosdistro 如果是自己的改成/home/user/rosdistro,其中user表示用户名 2.修改/usr/lib/python2/dist-packages/rosdep2/rep3.py文件 cd /usr/lib/python2/dist-packages/ros

努力是明天快乐的源泉 5万+

redis分页查询

redis不仅可以存普通文本,还可以存入List,这里就整理了下用redis做分页查询的功能。首先定义一个redis工具类,这里只贴出了需要的方法。redis分页查询效率很高,对于不需要持久化的数据可以使用此方案。接下来是应用层的调用。

m0_74824894的博客 492

【RK3399 Ubuntu】基于rk3399的lxde的lubuntu桌面移植适配记录之第二步:最基本Ubuntu根文件系统的相关常用工具完善

文章目录1.使能系统网络管理服务1.1 安装驱动modules管理工具1.2 使能网络服务2.终端自动补全命令功能3.安装ssh服务4.安装系统信息查看工具5.安装resize工具6.安装lrzsz工具7.使能rc.local服务7.1 修改服务Install块7.2 使能rc.local.service服务7.3 添加执行脚本且赋予执行权限 续接上文,本文主要完善前面已经制作好的rootfs 1.使能系统网络管理服务 1.1 安装驱动modules管理工具 apt-get install kmod 1.

wang 恒 的博客 1387

Spring Data Redis 如何使用ZSet(sorted set)实现分页查询

在 Redis 中,ZSet(有序集合)是一种非常有用的数据结构,它允许我们存储一组唯一的成员,并为每个成员分配一个分数,这使得成员可以按照分数进行排序。虽然 ZSet 并没有直接提供分页功能,但我们可以通过结合使用 zRange 命令和客户端代码来实现分页效果

weixin_58936212的博客 1464

用 CDS View I_APARToleranceGroup 管理客户与供应商收付差异容差:配置语义、字段解读与 ABAP 落地实践

财务共享服务中心常面临小额差异处理的挑战,SAP通过"客户/供应商容差组"机制实现自动清账规则配置。CDS视图I_APARToleranceGroup将配置数据转化为可查询维度,包含宽限天数、固定现金折扣等关键业务参数。该视图支持按公司代码和容差组查询差异处理策略,可用于报表开发、主数据校验和接口合规检查,帮助财务团队高效管理海量小额交易差异,减少手工操作。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 130

【异常】Cursor编辑器 “Taking longer than expected...“ 报错全链路排查与解决方案

该提示并非传统的程序崩溃或语法报错,本质是Cursor编辑器的超时预警机制——当核心任务(云端AI推理请求、本地项目索引等)的执行耗时超出系统预设阈值时,触发的用户告知类提示,核心诱因是任务执行全链路出现阻塞或性能瓶颈。以下方案按排查优先级从高到低排序,覆盖从快速急救到根因根治的全流程,可按步骤逐步验证解决。针对大仓库、多依赖项目的索引超时问题,核心是通过规则过滤无效文件,从根源降低索引负载。

奶爸的编程之路,也就一周冷个三天 3103

初学redis分页缓存方法实现

初学redis分页缓存方法实现 使用缓存技术一般是在不经常增删改查的数据,我们可以使用缓存技术将第一次请求访问的数据缓存到redis中保存起来,后来的请求的时候首先查询redis数据库是否查询到这些数据,如果存在,则返回数据,如果不存在,则到mysql或其他数据库查询数据返回并保存到redis数据库中。 为什么要采用分页缓存?直接设置缓存,如果数据量大,操作增删改,更新缓存频率高效率低。分...

September的博客 3948

在 Linux 64 位上遭遇 Signal 7 与 ST22 SYSTEM_CORE_DUMPED:从 es/implementation=std 到 /dev/shm 的一套落地排查法

摘要: Linux 64位SAP系统出现SYSTEM_CORE_DUMPED和Signal 7(对应SIGBUS)错误时,核心问题是进程因共享内存资源异常被操作系统强制终止。主要诱因包括:1)/dev/shm的tmpfs默认容量不足(通常仅占物理内存50%);2)SAP内存管理参数es/implementation=map在64位场景下的敏感性。解决方案应双管齐下:在实例profile设置es/implementation=std以降低对tmpfs的依赖,同时按(RAM+Swap)*75%重新配置/dev/

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 164

mysql分页 redis_[redis]redis实现分页的方法

每个主题下的用户的评论组装好写入Redis中,每个主题会有一个topicId,每一条评论会和topicId关联起来,大致的数据模型如下:{ topicId: 'xxxxxxxx', comments: [ { username: 'niuniu', createDate: 1447747334791, content: '在Redis中分页', commentId: 'xxxxxxx', repl...

weixin_29207533的博客 357

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

redis mysql分页新数据_redis实现分页查询的方法

redis实现分页查询的方法发布时间:2020-06-23 21:06:29来源:亿速云阅读:795作者:Leah这期内容当中小编将会给大家带来有关redis实现分页查询的方法,以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。基于SortedSet的分页查询缓存方案首先想到的解决方法是使用@see ListOperations不再根据分页条件使用多个key,而是使用一个key,也...

weixin_35703897的博客 695

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

[redis]redis实现分页的方法

每个主题下的用户的评论组装好写入Redis中,每个主题会有一个topicId,每一条评论会和topicId关联起来,大致的数据模型如下:{ topicId: 'xxxxxxxx', comments: [ { username: 'niuniu', createDate: 1447747334791, content: '在Redis中分页', commentId: 'xxxxxxx', repl...

weixin_30569033的博客 341

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

利用Redis List实现数据库分页快速查询的有效方法

利用Redis的List数据结构来实现数据库分页查询是一种有效的方法,可以提高查询性能和响应速度。通过将数据加载到Redis中,并利用LRANGE命令来执行分页查询,我们可以避免传统数据库分页查询中的性能问题。综上所述,利用Redis实现分页查询是一种简单而有效的方式,可以提高Web应用程序的性能和用户体验。为了解决这个问题,我们可以利用Redis的List数据结构来优化分页查询,提高查询性能和响应速度。这样,对于相同的查询,我们可以直接从缓存中获取数据,而不需要再次执行查询操作。

qq_52645134的博客 1995

使用Redis LIst 实现数据库分页快速查询的方法

利用Redis的List数据结构来实现数据库分页查询是一种有效的方法,可以提高查询性能和响应速度。通过将数据加载到Redis中,并利用LRANGE命令来执行分页查询,我们可以避免传统数据库分页查询中的性能问题。综上所述,利用Redis实现分页查询是一种简单而有效的方式,可以提高Web应用程序的性能和用户体验。为了解决这个问题,我们可以利用Redis的List数据结构来优化分页查询,提高查询性能和响应速度。这样,对于相同的查询,我们可以直接从缓存中获取数据,而不需要再次执行查询操作。

X_islu的博客 847

redis 实现分页 之 java List.subList方法

业务场景: 数据库存所有数据 redis 存放了部分异常数据的id 现在要把异常数据做分页 具体实现步骤 1 先把数据从数据库中全部查出 2 把异常数据 放到一个新的集合中 3 根据传过来的 每页条数 和当前第几页 用 java List.subList方法 返回数据 //起始下标 Integer start = (当前页 - 1) * 每页条...

weixin_43726822的博客 690

SpringBoot+Redis (+Pagehelper)分页

说明: 最初使用pagehelper进行分页,后考虑数据放入redis。 所以想pagehelper+redis结合进行分页,后发现需要写一套pagehelper分页还要再写一套redis分页,所以直接用一套redis分页抛弃pagehelper好了。 如想用pagehelper分页可参考https://mp.youkuaiyun.com/postedit/100132595 1. pom.x...

yuzhiqiang_1的博客 6266

Redis查询分页【JAVA】

本文介绍了Redis的核心特性及其在分页查询中的应用。Redis作为高性能内存数据库,支持多种数据结构、持久化机制和分布式特性,适用于缓存、分布式锁等场景。文章重点探讨了利用Redis实现分页查询的三种方案:List分页(LRANGE命令)、ZSet分页(ZRANGE命令)和Spring RedisTemplate分页,并提供了Java代码示例。最后分享了SSM框架中基于HSCAN命令的分页实现代码,通过游标(cursor)和ScanParams控制分页参数,实现大Key的高效分页处理。这些方案可根据业务需

瑞瑞绮绮的专栏 1193

SpringBoot整合Redis与Cache实现分页缓存

SpringBoot整合Redis与Cache实现分页缓存

qq_38062838的博客 5187

springboot整合redis实现分页

springboot整合redis实现分页 最近写springboot项目时遇到一个问题,就是使用redis实现分页。 在网上差了很多,看到了一个使用ZSet实现的,但是最后也没看懂,最后想了下想还是用list+map实现。 就拿做的订单分页来说,源码奉上 public Result queryAllOrderHave(Integer userId,Integer pageNo,Integer pageSize) { //用来判断这个用户是否存在,不展示这个方法的源码了 if(orde

YSecret_Y的博客 2655

【Redis】redis 存储的列表如何分页和检索

在 Redis 中,列表(List)是一种有序的数据结构,通常用于存储一系列元素。由于列表是有序的,可以通过索引来访问元素,因此可以很方便地实现分页和检索功能。

No8g攻城狮的博客 3046
上一篇: 5种Redis数据结构详解
下一篇: python安装redis 连接模块
timtimup_KSM
博客等级 码龄11年 5粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值