Redis Java 集成到 Spring Boot

Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~
🌱🌱个人主页:奋斗的明志
🌱🌱所属专栏:Redis

📚本系列文章为个人学习笔记,在这里撰写成文一为巩固知识,二为展示我的学习过程及理解。文笔、排版拙劣,望见谅。

在这里插入图片描述

Redis Java 集成到 Spring Boot

一、使用 Spring Boot 连接 Redis 单机

1.创建Spring Boot 项目

在这里插入图片描述

2.勾选相关依赖(Dependencies)

  • NoSQL 中的 Spring Data Redis
  • 把 Web 中的 Spring Web 也勾选⼀下.
  • 方便写接口进行后续测试.

在这里插入图片描述


在这里插入图片描述

3.界面显示

在这里插入图片描述

二、配置 Redis 服务地址

1.在 application.yml 中配置

```java
spring:
  data:
    redis:
      host: 127.0.0.1 # 地址
      port: 8888 # 映射的端口号

```

补充:
Spring Boot 1.x 和 Spring Boot 2.x 中,spring.redis.host 用于配置 Redis 连接属性。
Spring Boot 3.x 中,spring.redis.host 已经弃用。
从 Spring Boot 2.x 开始,引入了 spring.data.redis 作为配置 Redis 连接的方式,并且在 Spring Boot 3.x 中也可以使用 spring.data.redis 进行配置。

2.映射端口号

  • 用Shell8 进行配置,需要一个公网ip

在这里插入图片描述

三、创建 Controller 类

1.创建一个 MyController

由于当前只是写简单的测试代码, 我们就不进⾏分层了. 就只创建个简单的 Controller 即可.
在这里插入图片描述

```java
@RestController
public class MyController {
 @Autowired
 private StringRedisTemplate redisTemplate;
}

```

StringRedisTemplate 用来处理文本数据的
继承于RedisTemplate
RedisTemplate 可以处理文本数据也可以处理二进制数据

在这里插入图片描述

2.使用 String

```java
@GetMapping("/testString")
@ResponseBody
public String testString() {
    //先清除之前的数据库
    redisTemplate.execute((RedisConnection connection) -> {
        connection.flushAll();
        return null;
    });
    //对原生 redis 又做了进一步封装
    redisTemplate.opsForValue().set("key", "111");
    redisTemplate.opsForValue().set("key2", "222");
    redisTemplate.opsForValue().set("key3", "333");

    String value = redisTemplate.opsForValue().get("key");
    System.out.println("value:" + value);
    return "OK";
}

```
  1. 该代码片段是一个 Spring Boot 控制器方法,通过 RedisTemplate 与 Redis 进行交互,并进行一些基本的操作
  2. redisTemplate.execute((RedisConnection connection) -> { ... }):这行代码调用了 RedisTemplateexecute 方法,执行一个 Redis 操作。具体来说,connection.flushAll()会清空 Redis 中的所有数据(即调用 FLUSHALL 命令)。execute 方法通过 Lambda 表达式传递了一个 Redis 连接对象,用来执行 Redis 命令。执行完 flushAll 后,Redis 中的所有数据会被删除。
  3. redisTemplate.opsForValue() 相当于对命令进行进一步的封装,用它可以调用相关方法。

  4. 客户端发送请求(返回OK)表明已经成功

在这里插入图片描述


  • 打印日志

在这里插入图片描述


3.使用 List

```java
@GetMapping("/testList")
@ResponseBody
public String testList() {
    //先清除之前的数据库
    redisTemplate.execute((RedisConnection connection) -> {
        connection.flushAll();
        return null;
    });
    redisTemplate.opsForList().leftPush("key", "111");
    redisTemplate.opsForList().leftPush("key", "222");
    redisTemplate.opsForList().leftPush("key", "333");

    String value = redisTemplate.opsForList().leftPop("key");
    System.out.println("value: " + value);

    value = redisTemplate.opsForList().leftPop("key");
    System.out.println("value: " + value);

    value = redisTemplate.opsForList().leftPop("key");
    System.out.println("value: " + value);

    return "OK";
}

```
  • 客户端发送请求(返回OK)表明已经成功

在这里插入图片描述


  • 打印日志

在这里插入图片描述

4.使用 Set

```java
@GetMapping("/testSet")
@ResponseBody
public String testSet() {
    //先清除之前的数据库
    redisTemplate.execute((RedisConnection connection) -> {
        connection.flushAll();
        return null;
    });
    redisTemplate.opsForSet().add("key", "111", "222", "333");
    Set result = redisTemplate.opsForSet().members("key");
    System.out.println("result: " + result);

    Boolean exists = redisTemplate.opsForSet().isMember("key", "111");
    System.out.println("existe: " + exists);

    Long count = redisTemplate.opsForSet().size("key");
    System.out.println("count: " + count);

    redisTemplate.opsForSet().remove("key", "111", "222");
    result = redisTemplate.opsForSet().members("key");
    System.out.println("result: " + result);

    return "OK";
}

```
  • 客户端发送请求(返回OK)表明已经成功

在这里插入图片描述


  • 打印日志

在这里插入图片描述

5.使用 Hash

```java
@GetMapping("/testHash")
@ResponseBody
public String testHash() {
    //先清除之前的数据库
    redisTemplate.execute((RedisConnection connection) -> {
        connection.flushAll();
        return null;
    });
    redisTemplate.opsForHash().put("key", "f1", "111");
    Map map = new HashMap<>();
    map.put("f2", "222");
    map.put("f3", "333");
    redisTemplate.opsForHash().putAll("key", map);

    String value = (String) redisTemplate.opsForHash().get("key", "f1");
    System.out.println("value: " + value);

    Boolean exists = redisTemplate.opsForHash().hasKey("key", "f1");
    System.out.println("exists: " + exists);

    redisTemplate.opsForHash().delete("key", "f1", "f2");
    Long len = redisTemplate.opsForHash().size("key");
    System.out.println("len: " + len);

    return "OK";
}

```
  • 客户端发送请求(返回OK)表明已经成功

在这里插入图片描述


  • 打印日志

在这里插入图片描述


6.使用 ZSet

```java
@GetMapping("/testZSet")
@ResponseBody
public String testZSet() {
    //先清除之前的数据库
    redisTemplate.execute((RedisConnection connection) -> {
        connection.flushAll();
        return null;
    });
    redisTemplate.opsForZSet().add("key", "zhangsan", 10);
    redisTemplate.opsForZSet().add("key", "lisi", 20);
    redisTemplate.opsForZSet().add("key", "wangwu", 30);

    Set members = redisTemplate.opsForZSet().range("key", 0, -1);
    System.out.println("members: " + members);

    Set> membersWithScores = redisTemplate.opsForZSet().rangeWithScores("key", 0, -1);
    System.out.println("membersWithScores: " + membersWithScores);

    Double score = redisTemplate.opsForZSet().score("key", "zhangsan");
    System.out.println("score: " + score);

    redisTemplate.opsForZSet().remove("key", "zhangsan");
    Long size = redisTemplate.opsForZSet().size("key");
    System.out.println("size: " + size);

    Long rank = redisTemplate.opsForZSet().rank("key", "lisi");
    System.out.println("rank: " + rank);
    return "OK";
 }

```
  • 客户端发送请求(返回OK)表明已经成功

在这里插入图片描述


  • 打印日志

在这里插入图片描述

四、小结

  • 对于 Jedis 来说, 各个方法和 Redis 的命令基本是一致的.
  • 而集成到 Spring Boot 之后, 接口上和原始 Redis命令存在部分差别, 但是使用起来也并不困难, 只要大家熟悉 Redis 的基本操作, 还是很容易可以通过方法名字理解用法的.

在这里插入图片描述

在这里插入图片描述

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/5239.html

(0)
LomuLomu
上一篇 2025 年 1 月 5 日
下一篇 2025 年 1 月 5 日

相关推荐

  • 促销系统:促销活动、优惠券、优惠规则概念模型设计

    大家好,我是汤师爷~ 概念模型设计是促销系统开发的关键环节,我们需要基于之前的功能分析,将复杂的促销业务拆解成清晰的领域概念,这些概念之间的关系界定和边界划分,将直接决定系统的可维护性和扩展性。 促销系统核心概念模型 通过对促销业务的分析,我们可以抽象出促销系统的关键概念模型。 1、促销活动模型 促销活动模型对活动的各个要素和规则进行抽象,包含活动名称、描述…

    2025 年 1 月 6 日
    31200
  • 交易系统:退款单模型设计详解

    大家好,我是汤师爷~ 退款单是交易逆向流程的核心,它在售后管理中扮演着至关重要的角色。 售后领域的关键概念模型 1、退款单 退款单是追踪和管理退款流程的关键业务文档,它包含以下重要信息: 租户ID:用于识别所属的商家或机构 退款单ID:每张退款单的唯一代码 原订单ID:与退款单相关联的原始订单编号 业务类型:包括仅退款、退货退款等选项 退款类型:例如全额退款…

    2024 年 12 月 26 日
    26900
  • 【初阶数据结构与算法】八大排序之非递归系列( 快排(使用栈或队列实现)、归并排序)

    * 文章目录 一、非递归版快排 1.使用栈实现非递归版快排 2.使用队列实现非递归版快排 二、非递归版归并排序 1.非递归版归并排序的实现 一、非递归版快排 1.使用栈实现非递归版快排 在学习非递归版快排前,建议大家先学习递归版的快排,否则非递归版的快排将很难理解,这里附上本人写的快排的博客解析:【初阶数据结构与算法】八大排序算法之交换排序(冒泡排序,快速排…

    2025 年 1 月 11 日
    12600
  • Bolt.new 30秒做了一个网站,还能自动部署,难道要吊打 Cursor?

    大家好,我是汤师爷~ 这篇聊聊 Bolt.new 和 Cursor 的对比。 Bolt.new 是一款基于 SaaS 的 AI 编码平台。它由 LLM 驱动的智能体作为底层,并结合 WebContainers 技术,让用户可以直接在浏览器中进行编码和运行。其主要优势包括: 支持前后端同时开发; 项目文件夹结构可视化; 环境自托管,自动安装依赖(如 Vite、…

    2025 年 1 月 12 日
    20900
  • Java程序员必读的10本豆瓣高分经典书籍PDF

    要想成为一名优秀的Java程序员,不仅需要精通Java语言本身,还需要扎实的计算机基础、良好的编码习惯以及对软件开发全局的理解。掌握了这些基础知识,就像拥有了九阳神功和乾坤大挪移一样,再学习其它各门各派功夫直接手到擒来! 以下是从计算机基础、编程思想、Java语言、架构设计等方面精选的10本豆瓣高分经典书籍,它们能够帮助Java程序员全面提升编程能力和职业素…

    2025 年 1 月 15 日
    37500

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信