首先,让我们了解一下Redis的List数据结构。List是一个链表,每个元素都分配了一个唯一的索引。我们可以通过索引来访问和操作列表中的元素。Redis提供了一系列的命令来操作List,如LPUSH
、RPUSH
、LPOP
、RPOP
等。这些命令可以用于在列表的头部或尾部添加、删除元素,也可以用于获取列表的长度、获取指定范围内的元素等操作。
假设有一个存储数据的 List,每个元素代表一个记录,例如 myList。
- 按页存储数据: 每页存储一定数量的记录。例如,第一页存储索引 0 到 N-1 的记录,第二页存储索引 N 到 2N-1 的记录,以此类推。
- 分页查询: 当需要查询某一页的数据时,可以使用 Redis 的 LRANGE 命令来获取指定范围内的记录。例如,对于第一页,可以使用 LRANGE myList 0 (pageSize-1)。
- 分页信息存储: 可以使用一个额外的数据结构存储分页信息,例如总记录数和每页记录数。这可以是 Redis 的 Hash 结构,将分页信息存储为字段。
实现过程
1、添加对应的依赖坐标:
<!--redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2、配置redis参数(根据自己的具体实际情况来填):
spring:
data:
redis:
password: 123456
host: 192.168.0.9
port: 6379
3、插入模拟数据:
public void addToList() {
ListOperations<String, String> op = redisTemplate.opsForList();
for (int i = 1; i <= 100; i++) {
op.rightPush("myList", "Value" + i);
}
}
addToList
方法模拟插入了100条记录到名为myList
的Redis列表中
4、 分页查询:
/**
* 分页功能
*/
public void page(Integer pageIndex,Integer pageSize){
ListOperations<String, String> op = redisTemplate.opsForList();
List<String> values = op.range("myList",pageIndex,pageSize-1);
for (String value : values) {
ystem.out.println(value);
}
}
@Test
public void test(){
page(0,10);
}
从前端获取对应的pageIndex和pageSize传给page()方法从Redis列表中获取指定页面的元素,并将它们打印输出。这里只是简单的小demo没有涉及到前端页面的实现,只是简单的调用了一下这个函数
下面提供一个完整的示例:
package com.example.springboot_redis;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import java.util.List;
@SpringBootTest
public class Redis {
@Autowired
private StringRedisTemplate redisTemplate;
/**
* 模拟数据
*/
@Test
public void addToList() {
ListOperations<String, String> op = redisTemplate.opsForList();
for (int i = 1; i <= 100; i++) {
op.rightPush("myList", "Value" + i);
}
}
/**
* 查看全部数据
*/
@Test
public void viewList() {
ListOperations<String, String> op = redisTemplate.opsForList();
List<String> values = op.range("myList", 0, -1);
for (String value : values) {
System.out.println(value);
}
}
/**
* 分页功能
*/
public void page(Integer pageIndex,Integer pageSize){
ListOperations<String, String> op = redisTemplate.opsForList();
List<String> values = op.range("myList",pageIndex,pageSize-1);
for (String value : values) {
System.out.println(value);
}
}
/**
* 测试分页功能
*/
@Test
public void test(){
page(0,10);
}
/**
* 删除之前myList里的数据
*/
@Test
public void delList() {
redisTemplate.delete("myList");
}
}
效果展示