当前位置: 首页 > news >正文

Java使用Redis实现分页功能

分页功能实现应该是比较常见的,对于redis来说,近期刷题就发现了lrange、zrange这些指令,这个指令怎么使用呢?
我们接下来就来讲解下。

目录

  • 指令简介
    • lrange
    • zrange
  • Java实现Redis实现分页功能

指令简介

lrange

lrange 是 Redis 中的一个命令,用于从列表中获取指定范围内的元素。
语法:lrange key start end
start 和 end是两个整数,表示要从列表中获取元素的起始和结束位置。索引从0开始,所以start和end都应该大于等于0。如果start大于end,交换它们的位置。
lrange 命令将返回一个列表,其中包含从start到end(不包括)位置的元素。
示例:lrange my_list 0 4

zrange

zrange是用于从有序集合中排序查询(升序)指定范围内的元素。(zrevrange是降序,语法同理)
语法:ZRANGE key start stop [WITHSCORES] (WITHSCORES显示分数)
示例:ZRANGE myzset 0 -1 WITHSCORES(显示全部) 或 ZRANGE myzset 0 2 (显示下标区间0-2)

Java实现Redis实现分页功能

import redis.clients.jedis.Jedis;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;public class RedisPagination {private Jedis jedis;public RedisPagination(Jedis jedis) {this.jedis = jedis;}/*** 获取指定页码的列表* @param pageNo 页码* @param pageSize 每页大小* @return*/public List<String> getPageList(String listKey,int pageNo,int pageSize){// 计算起始和结束索引int start = (pageNo - 1) * pageSize;int end = start + pageSize - 1;//存储结果List<String> result = new ArrayList<>();// 使用lrange获取分页数据long totalItems = jedis.llen(listKey); // 获取总条目数System.out.println("总条目数: " + totalItems);if (totalItems > 0) {// 确保结束索引不超过总条目数end = Math.min(end, (int) (totalItems - 1));// 使用lrange进行分页result = jedis.lrange(listKey, start, end);}return result;}/*** 获取指定页码的有序集合* @param pageNo 页码* @param pageSize 每页大小* @return*/public Set<String> getPageSet(String setKey,int pageNo,int pageSize){// 计算起始和结束索引int start = (pageNo - 1) * pageSize;int end = start + pageSize - 1;//存储结果Set<String> result = new HashSet<>();// 使用zrange获取分页数据long totalItems = jedis.zcard(setKey); // 获取总条目数System.out.println("总条目数: " + totalItems);if (totalItems > 0) {// 确保结束索引不超过总条目数end = Math.min(end, (int) (totalItems - 1));// 使用lrange进行分页result = jedis.zrange(setKey, start, end);}return result;}public static void main(String[] args) {Jedis jedis = new Jedis("localhost",6379);RedisPagination pagination = new RedisPagination(jedis);System.out.println("列表分页结果:"+pagination.getPageList("my_list",1,5));System.out.println("集合分页结果:"+pagination.getPageSet("myzset",1,5));jedis.close();}
}

测试结果:

总条目数: 7
列表分页结果:[task1, task2, task3, test1, test2]
总条目数: 4
集合分页结果:[baidu.com, google.com, 360.com, google.com1]

http://www.lryc.cn/news/303306.html

相关文章:

  • Qt标准对话框设置
  • 如何让Obsidian实现电脑端和安卓端同步
  • windows系统中jenkins构建报错提示“拒绝访问”
  • 服务器防火墙的应用技术有哪些?
  • 力扣:40. 组合总和 II
  • Java设计模式——责任链模式
  • c++面试
  • [ansible] playbook运用
  • MSSQL运用
  • linux命令--pidof
  • 计算机视觉发展的方向和潜在机会
  • Java Web(六)--XML
  • 智慧城市的新宠儿:会“思考”的井盖
  • Linux限定网络和工具环境下时间同步
  • SQL Server查询计划(Query Plan)——文本查询计划
  • 2024年2月的TIOBE指数,go语言排名第8,JAVA趋势下降
  • 机器人十大前沿技术(2023-2024年)
  • Spring: MultipartFile和File的区别
  • ncnn之三(补充):window环境下vs2022安装ncnn+protobuf
  • 第五篇【传奇开心果系列】Python文本和语音相互转换库技术点案例示例:详细解读pyttsx3的`preprocess_text`函数文本预处理。
  • logback实践
  • 深入理解java虚拟机---自动内存管理
  • 粉笔规范词积累(文化发展)
  • 如何在Ubuntu部署Emlog,并将本地博客发布至公网可远程访问
  • Axios
  • 数据仓库选型建议
  • 每日一题——LeetCode1470.重新排列数组
  • 网络安全--网鼎杯2018漏洞复现(二次注入)
  • CSS篇--transform
  • 阿里云国际-在阿里云服务器上快速搭建幻兽帕鲁多人服务器