Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~
🌱🌱个人主页:奋斗的明志
🌱🌱所属专栏:Redis
📚本系列文章为个人学习笔记,在这里撰写成文一为巩固知识,二为展示我的学习过程及理解。文笔、排版拙劣,望见谅。
Redis Java 集成到 Spring Boot
- [一、使用 Spring Boot 连接 Redis 单机](#一、使用 Spring Boot 连接 Redis 单机)
-
- [1.创建Spring Boot 项目](#1.创建Spring Boot 项目)
- 2.勾选相关依赖(Dependencies)
- 3.界面显示
- [二、配置 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";
}
- 该代码片段是一个 Spring Boot 控制器方法,通过 RedisTemplate 与 Redis 进行交互,并进行一些基本的操作
redisTemplate.execute((RedisConnection connection) -> { ... })
:这行代码调用了RedisTemplate
的execute
方法,执行一个Redis
操作。具体来说,connection.flushAll()
会清空 Redis 中的所有数据(即调用FLUSHALL
命令)。execute
方法通过Lambda
表达式传递了一个Redis
连接对象,用来执行Redis
命令。执行完flushAll
后,Redis
中的所有数据
会被删除。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
的基本操作, 还是很容易可以通过方法名字理解用法的.