使用 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));
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

文件上传到本地

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>上传文件</title> </head> <body><form action"/upload" method"post" enctype"multipart/form-data&…

小黑艰难的前端啃bug之路:内联元素之间的间隙问题

今天开始学习前端项目&#xff0c;遇到了一个Bug调了好久&#xff0c;即使margin为0&#xff0c;但还是有空格。 小黑整理&#xff0c;用四种方法解决了空白问题 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></tit…

部署TOMCAT详解

目录 一、Tomcat概述 1.1Tomcat简介 1.2、Tomcat历史 1.3Tomcat官网 二、部署单实例Tomcat 1.下载Tomcat包 2. 解压Tomcat包 3.配置环境变量 4.刷新环境变量 5.查看tomcat是否安装成功 6.启动Tomcat 三、Tomcat目录介绍 1、tomcat主目录介绍 2.webapps目录介绍 3…

量子网络是什么

量子网络是基于量子力学规律对量子信息进行存储、处理和传输的物理装置&#xff0c;是实现量子通讯和大规模量子计算的基础。清华大学研究团队利用同种离子的双类型量子比特编码&#xff0c;在国际上首次实现无串扰的量子网络节点&#xff0c;对未来实现量子通讯和大规模量子计…

Springboot集成规则引擎框架-LiteFlow

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一波电子书籍资料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虚拟机》&#xff0c;《重构改善既有代码设计》&#xff0c;《MySQL高性能-第3版》&…

mysql调优-Join多种连接方式

简单嵌套循环连接 r为驱动表&#xff0c;s为匹配表&#xff0c;可以看到从r中分别取出每一个记录去匹配s表的列&#xff0c;然 后再合并数据&#xff0c;对s表进行r表的行数次访问&#xff0c;对数据库的开销比较大 索引嵌套循环连接 这个要求非驱动表&#xff08;匹配表s&…

Linux中目录的操作和文件属性获取(opendir、readdir、close函数的使用)

访问目录 opendir函数 #include <dirent.h> DIR *opendir(const char *name); DIR *fdopendir(int fd); 使用文件描述符&#xff0c;要配合open函数使用 DIR是用来描述一个打开的目录文件的结构体类型 成功时返回目录流指针&#xff1b;出错时返回NULLreaddir函数 #incl…

Adobe Media Encoder 2023下载安装教程,ME 2023安装教程,附安装包和工具,无套路,轻松搞的安装

前言 Adobe Media Encoder是一个视频和音频编码应用程序&#xff0c;可让针对不同应用程序和观众&#xff0c;以各种分发格式对音频和视频文件进行编码。包括专门设计的预设设置&#xff0c;以便导出与特定交付媒体兼容的文件&#xff0c;可以按适合多种设备的格式导出视频&am…

【医学图像数据增强】切割-拼接(CS-DA)

切割-拼接CS-DA CS-DA 核心思想自然图像和医学图像之间的关键差异CS-DA 步骤确定增强后的数据数量 代码复现 CS-DA 核心思想 论文链接&#xff1a;https://arxiv.org/ftp/arxiv/papers/2210/2210.09099.pdf 大多数用于医学分割的数据增强技术最初是在自然图像上开发的&#x…

Git 教程 | 将本地修改后的文件推送到 Github 指定远程分支上

Git 是一种分布式版本控制系统&#xff0c;用于敏捷高效地处理任何大小的项目。它是由 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的开源版本控制软件。Git 的本地克隆就是一个完整的版本控制存储库&#xff0c;无论脱机还是远程都能轻松工作。开发人员会在本地提交其工…

Maven进阶

学习目标 理解分模块开发的意义 能够使用聚合工程快速构建项目 能够使用继承简化项目配置 能够根据需求配置生产、开发、测试环境&#xff0c;并在各环境间切换运行 一、分模块开发与设计 1. 分模块开发的意义 问题导入 分模块开发对工程有什么好处&#xff1f; 模块拆分原…

接口测试时遇到接口加密了该如何处理?

对明文编码生成信息摘要&#xff0c;以防止被篡改。比如MD5使用的是Hash算法&#xff0c;无论多长的输入&#xff0c;MD5都会输出长度为128bits的一个串。摘要算法不要秘钥&#xff0c;客户端和服务端采用相同的摘要算法即可针对同一段明文获取一致的密文。 对称加密 对称加密…

VM下Unbunt虚拟机上网设置

系列文章目录 VM下Unbunt虚拟机上网设置 VM虚拟机上网设置 系列文章目录一、VM虚拟机上网设置 一、VM虚拟机上网设置 右击VM软件中你需要设置的虚拟机&#xff0c;选择设置 宿主机如果你用的是笔记本外加WIFI连接选择NAT网络模式 进入虚拟机看能否上网 不行的话&#xff0c;进…

计算机速成课Crash Course - 23. 屏幕 2D 图形显示

今天继续计算机速成课Crash Course的系列讲解。 更多技术文章&#xff0c;全网首发公众号 “摸鱼IT” 锁定 -上午11点 - &#xff0c;感谢大家关注、转发、点赞&#xff01; 计算机速成课Crash Course - 23. 屏幕& 2D 图形显示 (qq.com) 23. 屏幕& 2D 图形显示 这台…

【Go 快速入门】安装 Go 语言 | 开发工具 Goland | 第一个 Go 语言程序

文章目录 前言安装 Go 语言编译器 Goland运行 Go 程序补充 前言 本系列教程&#xff0c;目的是帮助一个有其他编程基础的 Go 语言小白快速入门 Go 语言&#xff0c;而非启发式学习。每篇幅保证不说废话&#xff0c;尽可能精炼总结&#xff0c;为上手后续的 Go 相关项目打下基础…

目标检测数据集 - 抽烟检测数据集下载「包含VOC、COCO、YOLO三种格式」

数据集介绍&#xff1a;抽烟检测数据集&#xff0c;真实合成场景高质量图片数据&#xff0c;涉及场景丰富&#xff0c;比如街景抽烟、写字楼抽烟、办公室抽烟、楼道抽烟、遮挡行人抽烟、严重遮挡行人抽烟数据&#xff1b;适用实际项目应用&#xff1a;公共场所监控或室内监控场…

2024年,每个人都应该知道的10个免费学习资源网站

在这个数字化的时代&#xff0c;有着许多宝贵的网络资源&#xff0c;提供了无限的学习机会&#xff0c;为每个人敞开了免费获取知识的大门。但很多人不知道它们的存在。今天分享10个免费且丰富的学习资源网站&#xff0c;希望对大家所有帮助。 1.freeCodeCamp 您可以免费学习…

<网络安全>《2 国内主要企业网络安全公司概览(二)》

4 北京天融信科技有限公司(简称天融信) 信息内容LOGO成立日期创始于1995年总部北京市海淀区上地东路1号院3号楼北侧301室背景民营企业是否上市天融信[002212]A股市值99亿主要产品网络安全大数据云服务员工规模6000多人简介天融信科技集团&#xff08;证券代码&#xff1a;0022…

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

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

利用C语言实例描述程序中的内聚和耦合

编程时&#xff0c;我们讲究的是高内聚低耦合&#xff0c;在协同开发、代码移植、维护等环节都起到很重要的作用。 一、原理篇 而低耦合&#xff0c;是指模块之间尽可能的使其独立存在&#xff0c;模块之间不产生联系不可能&#xff0c;但模块与模块之间的接口应该尽量少而简单…