SpringBoot依赖之Spring Data Redis 一 List 类型

概念

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 类中添加列表相关的方法。

java 复制代码
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 中添加处理列表操作的端点。

java 复制代码
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相关操作,还是要结合具体的业务选择具体的存储类型,这样对于项目后期的迭代具有事半功倍的效果。所以项目前期的技术选型也很重要,不容忽视。

可以关注我一起学习!一起为程序员职业生涯蓄能!

相关推荐
李小白6611 分钟前
Redis常见指令
数据库·redis·缓存
我叫张土豆16 分钟前
Neo4j 版本选型与 Java 技术栈深度解析:Spring Data Neo4j vs Java Driver,如何抉择?
java·人工智能·spring·neo4j
Slow菜鸟23 分钟前
SpringBoot集成Elasticsearch | Elasticsearch 7.x专属HLRC(High Level Rest Client)
spring boot·elasticsearch·jenkins
lang2015092824 分钟前
Spring环境配置与属性管理完全指南
java·python·spring
lang2015092826 分钟前
Spring Bean作用域全解析
java·后端·spring
Slow菜鸟28 分钟前
SpringBoot教程(安装篇):Elasticsearch及可视化工具安装(Windows环境)
spring boot·elasticsearch
忧郁的橙子.29 分钟前
IntelliJ IDEA 2023中为 Spring Boot 项目添加注释模板
java·spring boot·intellij-idea
秋千码途33 分钟前
Spring的@Cacheable取缓存默认实现
java·spring·缓存
聆风吟º36 分钟前
【Spring Boot 报错已解决】别让端口配置卡壳!Spring Boot “Binding to target failed” 报错解决思路
android·java·spring boot
码住懒羊羊1 小时前
【Linux】操作系统&进程概念
java·linux·redis