概念
Spring Data Redis (Access+Driver)
- 依赖名称: Spring Data Redis (Access+Driver)
- 功能描述: Advanced and thread-safe Java Redis client for synchronous, asynchronous, and reactive usage. Supports Cluster, Sentinel, Pipelining, Auto-Reconnect, Codecs and much more.
- 中文释义:用于同步、异步和反应式使用的高级且线程安全的 Java Redis 客户端。支持集群、哨兵、管道、自动重新连接、编解码器等。
项目学习代码地址
操作演示:
在IDEA中创建项目过程可以参考上一篇:
SpringBoot依赖之Spring Data Redis 一 String类型
Spring Boot 项目中使用 Spring Data Redis 实现列表list
接下来我们演示在 Spring Boot 项目中使用 Spring Data Redis 实现列表(List)操作,我们可以在之前的项目代码基础上扩展 Redis 服务类和控制器类,以支持对 Redis 列表的常见操作。以下是具体的实现步骤。
1. 更新 Redis 服务类
在 RedisService
类中添加列表相关的方法。
package com.dependencies.springdataredis;
import org.springframework.data.redis.core.*;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class RedisService {
private final RedisTemplate<String, Object> redisTemplate;
private final ListOperations<String, Object> listOperations;
public RedisService(RedisTemplate<String, Object> redisTemplate) {
this.redisTemplate = redisTemplate;
this.listOperations = redisTemplate.opsForList();
}
// 向列表左侧推入值
public void pushToListLeft(String key, String value) {
listOperations.leftPush(key, value);
}
// 向列表右侧推入值
public void pushToListRight(String key, String value) {
listOperations.rightPush(key, value);
}
// 从列表左侧弹出值
public String popFromListLeft(String key) {
return (String) listOperations.leftPop(key);
}
// 从列表右侧弹出值
public String popFromListRight(String key) {
return (String) listOperations.rightPop(key);
}
// 获取列表中所有值
public List<Object> getList(String key) {
return listOperations.range(key, 0, -1);
}
}
2. 更新控制器类
在 RedisController
中添加处理列表操作的端点。
package com.dependencies.springdataredis;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @author zhizhou 2024/8/17 12:02
*/
@RestController
public class RedisController {
private final RedisService redisService;
public RedisController(RedisService redisService) {
this.redisService = redisService;
}
// 向列表左侧推入值
@GetMapping("/list/leftpush")
public String leftPushToList(@RequestParam String key, @RequestParam String value) {
redisService.pushToListLeft(key, value);
return "值被推到列表的左侧";
}
// 向列表右侧推入值
@GetMapping("/list/rightpush")
public String rightPushToList(@RequestParam String key, @RequestParam String value) {
redisService.pushToListRight(key, value);
return "值被推到列表的右侧";
}
// 从列表左侧弹出值
@GetMapping("/list/leftpop")
public String leftPopFromList(@RequestParam String key) {
return redisService.popFromListLeft(key);
}
// 从列表右侧弹出值
@GetMapping("/list/rightpop")
public String rightPopFromList(@RequestParam String key) {
return redisService.popFromListRight(key);
}
// 获取列表中所有值
@GetMapping("/list/getall")
public List<Object> getAllFromList(@RequestParam String key) {
return redisService.getList(key);
}
}
3. 验证测试list相关操作
我们启动项目以后,就通过以下的额 URL 测试 Redis 列表的功能:
-
向列表左侧PUSH推入值:
http://localhost:8080/list/leftpush?key=oneList&value=value1
- 这会将
value1
推入到列表myList
的左侧。
- 这会将
-
向列表右侧PUSH推入值:
http://localhost:8080/list/rightpush?key=oneList&value=value2
- 这会将
value2
推入到列表myList
的右侧。
- 这会将
-
从列表左侧POP弹出值:
http://localhost:8080/list/leftpop?key=oneList
- 这会从列表
myList
的左侧弹出一个值。
- 这会从列表
-
从列表右侧POP弹出值:
http://localhost:8080/list/rightpop?key=oneList
- 这会从列表
myList
的右侧弹出一个值。
- 这会从列表
-
获取列表中所有值:
http://localhost:8080/list/getall?key=oneList
- 这会获取列表
myList
中的所有值。
- 这会获取列表
4. 总结
通过上述步骤,我们成功在 Spring Boot 项目中使用 Spring Data Redis 实现了对 Redis 列表类型的操作。您可以使用这些方法来处理复杂的队列、栈或其他基于列表的数据结构需求。
这是基本的list相关操作,还是要结合具体的业务选择具体的存储类型,这样对于项目后期的迭代具有事半功倍的效果。所以项目前期的技术选型也很重要,不容忽视。
可以关注我一起学习!一起为程序员职业生涯蓄能!