SpringDataRedis客户端
概述
SpringData是Spring中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成模块就叫做SpringDataRedis。SpringDataRedis提供了对不同Redis客户端的整合(如Lettuce和Jedis),提供了RedisTemplate统一API来操作Redis,支持Redis的发布订阅模型、哨兵和集群模式,支持基于Lettuce的响应式编程,支持基于JDK、JSON、字符串、Spring对象的数据序列化及反序列化,以及基于Redis的JDK Collection实现。
RedisTemplate
SpringDataRedis中提供了RedisTemplate工具类,其中封装了各种对Redis的操作。并且将不同数据类型的操作API封装到了不同的类型中,例如:
ValueOperations
:操作String类型数据HashOperations
:操作Hash类型数据ListOperations
:操作List类型数据SetOperations
:操作Set类型数据ZSetOperations
:操作SortedSet类型数据
快速入门
SpringBoot已经提供了对SpringDataRedis的支持,使用非常简单。下面是具体的步骤:
1)引入依赖
在pom.xml
文件中添加SpringDataRedis的依赖:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.7</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.heima</groupId>
<artifactId>redis-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>redis-demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--redis依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--common-pool-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<!--Jackson依赖-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
2)配置Redis
在application.yml
文件中配置Redis连接信息:
spring:
redis:
host: 192.168.150.101
port: 6379
password: 123321
lettuce:
pool:
max-active: 8
max-idle: 8
min-idle: 0
max-wait: 100ms
3)注入RedisTemplate
在SpringBoot应用中,可以直接注入RedisTemplate来操作Redis:
@SpringBootTest
class RedisStringTests {
@Autowired
private RedisTemplate redisTemplate;
}
4)编写测试
编写一个简单的测试类来验证RedisTemplate的使用:
@SpringBootTest
class RedisStringTests {
@Autowired
private RedisTemplate redisTemplate;
@Test
void testString() {
// 写入一条String数据
redisTemplate.opsForValue().set("name", "虎哥");
// 获取string数据
Object name = redisTemplate.opsForValue().get("name");
System.out.println("name = " + name);
}
}
拓展
除了基本的String类型操作,SpringDataRedis还支持其他数据类型的操作,例如Hash、List、Set和SortedSet。以下是一些示例:
Hash操作
@Test
void testHash() {
HashOperations hashOperations = redisTemplate.opsForHash();
// 写入Hash数据
hashOperations.put("user:1", "name", "张三");
hashOperations.put("user:1", "age", "25");
// 获取Hash数据
String name = (String) hashOperations.get("user:1", "name");
String age = (String) hashOperations.get("user:1", "age");
System.out.println("name = " + name);
System.out.println("age = " + age);
}
List操作
@Test
void testList() {
ListOperations listOperations = redisTemplate.opsForList();
// 写入List数据
listOperations.leftPush("fruits", "apple");
listOperations.leftPush("fruits", "banana");
// 获取List数据
List<String> fruits = listOperations.range("fruits", 0, -1);
System.out.println("fruits = " + fruits);
}
Set操作
@Test
void testSet() {
SetOperations setOperations = redisTemplate.opsForSet();
// 写入Set数据
setOperations.add("colors", "red", "green", "blue");
// 获取Set数据
Set<String> colors = setOperations.members("colors");
System.out.println("colors = " + colors);
}
SortedSet操作
@Test
void testSortedSet() {
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
// 写入SortedSet数据
zSetOperations.add("scores", "张三", 85);
zSetOperations.add("scores", "李四", 90);
// 获取SortedSet数据
Set<String> scores = zSetOperations.range("scores", 0, -1);
System.out.println("scores = " + scores);
}
通过以上示例,我们可以看到SpringDataRedis提供了非常方便的API来操作Redis的各种数据类型。希望这些内容能帮助学生们更好地理解和应用SpringDataRedis。