Redis Java 集成到 Spring Boot

Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~

🌱🌱个人主页:奋斗的明志

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

Redis Java 集成到 Spring Boot

  • [一、使用 Spring Boot 连接 Redis 单机](#一、使用 Spring Boot 连接 Redis 单机)
  • [二、配置 Redis 服务地址](#二、配置 Redis 服务地址)
    • [1.在 application.yml 中配置](#1.在 application.yml 中配置)
    • 2.映射端口号
  • [三、创建 Controller 类](#三、创建 Controller 类)
    • [1.创建一个 MyController](#1.创建一个 MyController)
    • [2.使用 String](#2.使用 String)
    • [3.使用 List](#3.使用 List)
    • [4.使用 Set](#4.使用 Set)
    • [5.使用 Hash](#5.使用 Hash)
    • [6.使用 ZSet](#6.使用 ZSet)
  • 四、小结

一、使用 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() 相当于对命令进行进一步的封装,用它可以调用相关方法。
  • 客户端发送请求(返回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<String> 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<String, String> 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<String> members = redisTemplate.opsForZSet().range("key", 0, -1);
    System.out.println("members: " + members);

    Set<ZSetOperations.TypedTuple<String>> 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 的基本操作, 还是很容易可以通过方法名字理解用法的.
相关推荐
Fly_hao.belief5 分钟前
泛型的讲解(泛型类、泛型方法、泛型接口)
java
我命由我1234510 分钟前
15.Java 网络编程(网络相关概念、InetAddress、NetworkInterface、TCP 网络通信、UDP 网络通信、超时中断)
java·开发语言·网络·后端·tcp/ip·udp·java-ee
sunshine__sun12 分钟前
自动化测试报错:Exception managing chrome: error decoding response body
java·前端·chrome
全栈小酷Cool17 分钟前
【23种设计模式】原型模式:理论剖析与Java实践
spring boot
蓝天星空24 分钟前
spring boot 3集成swagger
java·spring boot
漫漫不慢.31 分钟前
//需求:定义一个数组,存入1~5.要求打乱数组中所有数据的顺序
java
不修×蝙蝠33 分钟前
搭建Tomcat(一)---Socket&ServerSocket
java·服务器·笔记·tomcat·socket·serversocket
小参宿1 小时前
【Stream流】
java·开发语言
ruleslol1 小时前
java基础概念49-数据结构2
java·数据结构
qq_10613834571 小时前
快速搭建SpringBoot3+Vue3+ElementPlus管理系统
java·vue.js·spring boot·idea