使用 Redis 的 List 数据结构实现分页查询的思路

假设有一个存储数据的 List,每个元素代表一个记录,例如 recordsList

  1. 按页存储数据: 每页存储一定数量的记录。例如,第一页存储索引 0 到 N-1 的记录,第二页存储索引 N 到 2N-1 的记录,以此类推。

  2. 分页查询: 当需要查询某一页的数据时,可以使用 Redis 的 LRANGE 命令来获取指定范围内的记录。例如,对于第一页,可以使用 LRANGE recordsList 0 (pageSize-1)

  3. 分页信息存储: 可以使用一个额外的数据结构存储分页信息,例如总记录数和每页记录数。这可以是 Redis 的 Hash 结构,将分页信息存储为字段。

实现过程
  1. 导入Jedis库
    import redis.clients.jedis.Jedis;
    

    这里导入了Jedis库,它是Java与Redis通信的客户端。

  2. 定义类和常量:

    public class RedisPaginationExample {private static final String RECORDS_LIST = "recordsList";private static final String PAGINATION_INFO = "paginationInfo";private static final int PAGE_SIZE = 10;
    

    RedisPaginationExample包含了一些常量,如记录列表的键(RECORDS_LIST)、分页信息的键(PAGINATION_INFO)以及每页记录数(PAGE_SIZE)。

  3. 主函数:

    public static void main(String[] args) {Jedis jedis = new Jedis("localhost", 6379);insertSampleData(jedis);int pageNumber = 1;paginate(pageNumber, jedis);jedis.close();
    }
    

    在主函数中,首先创建了一个Jedis实例,连接到本地Redis服务器。然后调用insertSampleData方法插入模拟数据,最后调用paginate方法进行分页查询并输出结果。

  4. 插入模拟数据:

    private static void insertSampleData(Jedis jedis) {for (int i = 0; i < 100; i++) {jedis.rpush(RECORDS_LIST, "Record " + i);}jedis.hset(PAGINATION_INFO, "totalRecords", "100");jedis.hset(PAGINATION_INFO, "pageSize", String.valueOf(PAGE_SIZE));
    }
    

    insertSampleData方法模拟插入了100条记录到名为recordsList的Redis列表中,并存储了分页信息,包括总记录数和每页记录数。

  5. 分页查询:

    private static void paginate(int pageNumber, Jedis jedis) {int pageSize = Integer.parseInt(jedis.hget(PAGINATION_INFO, "pageSize"));int totalRecords = Integer.parseInt(jedis.hget(PAGINATION_INFO, "totalRecords"));int startIndex = (pageNumber - 1) * pageSize;int endIndex = pageNumber * pageSize - 1;System.out.println("Page " + pageNumber + " Records: " + jedis.lrange(RECORDS_LIST, startIndex, endIndex));
    }
    

    paginate方法根据传入的页码进行分页查询。它从Redis中获取总记录数和每页记录数,然后计算起始索引和结束索引,最后使用lrange方法获取指定范围的记录并打印输出。

下面提供一个完整的示例:

import redis.clients.jedis.Jedis;public class RedisPaginationExample {private static final String RECORDS_LIST = "recordsList";private static final String PAGINATION_INFO = "paginationInfo";private static final int PAGE_SIZE = 10;public static void main(String[] args) {// 初始化 Redis 连接Jedis jedis = new Jedis("localhost", 6379);// 模拟插入数据insertSampleData(jedis);// 分页查询第一页数据int pageNumber = 1;paginate(pageNumber, jedis);// 关闭连接jedis.close();}private static void insertSampleData(Jedis jedis) {// 模拟插入100条记录for (int i = 0; i < 100; i++) {jedis.rpush(RECORDS_LIST, "Record " + i);}// 存储分页信息jedis.hset(PAGINATION_INFO, "totalRecords", "100");jedis.hset(PAGINATION_INFO, "pageSize", String.valueOf(PAGE_SIZE));}private static void paginate(int pageNumber, Jedis jedis) {// 获取每页记录数和总记录数int pageSize = Integer.parseInt(jedis.hget(PAGINATION_INFO, "pageSize"));int totalRecords = Integer.parseInt(jedis.hget(PAGINATION_INFO, "totalRecords"));// 计算起始索引和结束索引int startIndex = (pageNumber - 1) * pageSize;int endIndex = pageNumber * pageSize - 1;// 分页查询System.out.println("Page " + pageNumber + " Records: " + jedis.lrange(RECORDS_LIST, startIndex, endIndex));}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/647422.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

书生·浦语大模型--第六节课笔记作业--OpenCompass大模型评测

文章目录 OpenCompass评测框架实战&基础作业安装查看支持的数据集和模型启动评测 为什么需要评测&#xff1f; 统一的模型评测 如何评测&#xff1f; 基座模型需要加上额外的提示 客观评测&#xff1a;只要回答包括北京就可以认为正确 主观评测&#xff1a;创作类问题。人工…

设计模式_访问者模式_Visitor

案例引入 要求 测评系统需求&#xff1a;将观众分为男人和女人&#xff0c;对歌手进行测评&#xff0c;当看完某个歌手表演后&#xff0c;得到他们对该歌手不同的评价(比如 成功、失败 等) 传统方案 Man和Woman里面都有“成功”、“失败”的方法 【分析】 如果系统比较小&…

springboot优雅停机

import org.springframework.context.annotation.Configuration;import javax.annotation.PreDestroy;Configuration public class DataBackupConfig {PreDestroypublic void backData(){System.out.println("开始备份..."System.currentTimeMillis());System.out.pr…

6.Toast(Android)

愿你出走半生,归来仍是少年&#xff01; 环境&#xff1a;.NET 7、MAUI 在Maui开发中使用的Toast太丑了&#xff0c;在android项目中使用时不够看。通过Maui的安卓绑定库可实现将android中已有的包导入到C#项目中使用&#xff0c;借助这个方法就可以使用以前在android原生开发…

Python_NumPy——入门学习(概述,数据类型,创建数组)

作者&#xff1a;初次知晓 邮箱&#xff1a;lr_1052107892outlook.com 资料参考 [菜鸟教程](https://www.runoob.com/)NumPy概述 NumPy(Numerical Python)是python的一个扩展程序库&#xff0c;支持大量的维度数据与矩阵运算&#xff0c;针对数据运算提供大量的数学函数库,包…

如何降低微服务复杂度丨云栖大会微服务主题分享实录

作者&#xff1a;谢吉宝 本文整理自阿里云资深技术专家、中间件负责人谢吉宝在2023云栖大会《极简微服务模式&#xff0c;降低微服务复杂度的最佳实践》的分享 2023 云栖大会现场 当面临复杂的挑战时&#xff0c;"分而治之"的方法往往能取得显著的效果。微服务架构…

C++——类型转换与特殊类设计

我们在C语言中经常会使用到强制类型转换&#xff0c;例如指针和整形之间的转换是最为常见的&#xff0c;但是 在C中&#xff0c;C设计师认为这种强制类型转换是不安全的&#xff0c;所以在C标准中加入了四种强制 类型转换风格&#xff0c;这就是我将要介绍的强制类型转换。 在某…

VS2022联合Qt5开发学习11(QT5.12.3联合VTK在VS2022上开发医学图像项目5——qvtkWidget上显示STL三维图像并取点)

这篇博文是接着这个系列前面的博文&#xff0c;来讲如何实现医学图像三视图同步视图。我想到的一个思路是用Scrollbar来控制切面的改变&#xff0c;还有一个想法是在三维图像上取点&#xff0c;然后以这个点为切面中心更新三维视图。这篇博文主要介绍的就是第二个想法的三维图像…

C++ qt标题栏组件绘制

本博文源于笔者在学习C qt制作的标题栏组件&#xff0c;主要包含了&#xff0c;最小化&#xff0c;最大化&#xff0c;关闭。读者在看到这篇博文的时候&#xff0c;可以直接查看如何使用的&#xff0c;会使用了&#xff0c;然后进行复制粘贴源码部分即可。 问题来源 想要制作…

支持向量机(Support Vector Machines)(需要优化)

1.优化目标 一个更加强大的算法广泛的应用于工业界和学术界&#xff0c;它被称为支持向量机(Support Vector Machine)。与逻辑回归和神经网络相比&#xff0c;支持向量机&#xff0c;或者简称 SVM&#xff0c;在学习复杂的非线性方程时提供了一种更为清晰&#xff0c;更加强大…

css 中 flex 布局最后一行实现左对齐

问题 flex 布局最后一行没有进行左对齐显示&#xff1a; <div classparent><div classchild></div><div classchild></div><div classchild></div><div classchild></div><div classchild></div><div…

2022年至2023年广东省职业院校技能大赛高职组“信息安全管理与评估”赛项样题

2022 年至 2023 年广东省职业院校技能大赛高职组“信息安全管理与评估”赛项样题 一、 第一阶段竞赛项目试题 本文件为信息安全管理与评估项目竞赛第一阶段试题&#xff0c;第一阶段内容包 括&#xff1a;网络平台搭建、网络安全设备配置与防护。 本阶段比赛时间为 180 分钟…

华为数通方向HCIP-DataCom H12-831题库(判断题:121-140)

第121题 BGP/MPLS IP VPN内层采用MP-BGP分配的标签区分不同的VPN实例,外层可采用多种隧道类型,例如GRE隧道。 正确 错误 答案: 错误 解析: VPN业务的转发需要隧道来承载,隧道类型包括GRE隧道、LSP隧道、TE隧道(即CR-LSP)。 如果网络边缘的PE设备具备MPLS功能,但骨干网核…

林浩然与Hadoop的奇幻数据之旅

林浩然与Hadoop的奇幻数据之旅 Lin Haoran and the Enchanting Data Journey with Hadoop 在一个名为“比特村”的地方&#xff0c;住着一位名叫林浩然的程序员大侠。他并非江湖上常见的武艺高强之人&#xff0c;而是凭借一把键盘、一支鼠标&#xff0c;纵横在大数据的海洋里。…

UI跟随物体的关键是什么?重要吗?

引言 UI的跟随效果 在游戏开发中&#xff0c;UI的跟随效果是提高用户体验和交互性的重要组成部分。 本文将深入介绍如何创建一个高效且可定制的UI跟随目标组件&#xff0c;并分享一些最佳实践。 本文源工程在文末获取&#xff0c;小伙伴们自行前往。 UI跟随物体的关键 UI…

MQ回顾之kafka速通

不定期更新 官网概念自查 官网&#xff1a;Apache Kafka kafka结构 和kafka相关的关键名词有&#xff1a;Producer、Broker、Topic、Partition、Replication、Message、Consumer、Consumer Group、Zookeeper。 各名词解释已经泛滥&#xff0c;如果你想看点不一样的&#xf…

A 股承担着一个什么功能?

​A 股&#xff1a;中国资本市场的核心角色 A 股&#xff0c;即人民币普通股票&#xff0c;在中国资本市场中扮演着至关重要的角色。它不仅是投资者买卖交易的场所&#xff0c;更是中国经济发展的重要引擎。 首先&#xff0c;A 股为中国的企业提供了融资平台。中国有着庞大的…

从Elasticsearch来看分布式系统架构设计

从Elasticsearch来看分布式系统架构设计 - 知乎 分布式系统类型多&#xff0c;涉及面非常广&#xff0c;不同类型的系统有不同的特点&#xff0c;批量计算和实时计算就差别非常大。这篇文章中&#xff0c;重点会讨论下分布式数据系统的设计&#xff0c;比如分布式存储系统&…

Zookeeper3.5.7源码分析

文章目录 一、Zookeeper算法一致性1、Paxos 算法1.1 概述1.2 算法流程1.3 算法缺陷 2、ZAB 协议2.1 概述2.2 Zab 协议内容 3、CAP理论 二、源码详解1、辅助源码1.1 持久化源码(了解)1.2 序列化源码 2、ZK 服务端初始化源码解析2.1 启用脚本分析2.2 ZK 服务端启动入口2.3 解析参…

鸿蒙入门学习的一些总结

前言 刚开始接触鸿蒙是从2023年开始的&#xff0c;当时公司在调研鸿蒙开发板能否在实际项目中使用。我们当时使用的是OpenHarmony的&#xff0c;基于DAYU/rk3568开发板&#xff0c;最开始系统是3.2的&#xff0c;API最高是API9&#xff0c;DevecoStudio 版本3.1的。 鸿…