Redis的Java客户端-SpringDataRedis
SpringData是Spring中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成模块就叫做SpringDataRedis,官网地址:https://spring.io/projects/spring-data-redis
- 提供了对不同Redis客户端的整合(Lettuce和Jedis)
- 提供了RedisTemplate统一API来操作Redis
- 支持Redis的发布订阅模型
- 支持Redis哨兵和Redis集群
- 支持基于Lettuce的响应式编程
- 支持基于JDK.JSON.字符串.Spring对象的数据序列化及反序列化
- 支持基于Redis的JDKCollection实现
SpringDataRedis中提供了RedisTemplate工具类,其中封装了各种对Redis的操作。并且将不同数据类型的操作API封装到了不同的类型中:
6.1.快速入门
SpringBoot已经提供了对SpringDataRedis的支持,使用非常简单:
6.1.1.导入pom坐标
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yate</groupId>
<artifactId>RedisDemo-heima</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.7</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!--jedis依赖-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.7.0</version>
</dependency>
<!--单元测试依赖-->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.7.0</version>
<scope>test</scope>
</dependency>
<!--SpringBoot依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.5.4</version>
</dependency>
<!--SpringBoot测试依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>2.5.4</version>
<scope>test</scope>
</dependency>
<!--SpringDataRedis依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.5.4</version>
</dependency>
<!--common-pool-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.11.1</version>
</dependency>
<!--Jackson依赖-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.3</version>
</dependency>
<!--fastjson依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
</project>
6.1.2 .配置文件
spring:
redis:
host: 0.0.0.0
port: 6379
password: 123456
lettuce:
pool:
max-active: 8 #连接池最大连接数
max-idle: 8 #连接池最大空闲连接数
min-idle: 0 #连接池最小空闲连接数
max-wait: 100ms #获取连接时的最大等待毫秒数
6.1.3.测试代码
@SpringBootTest
class RedisDemoApplicationTests {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@Test
void testString() {
// 写入一条String数据
redisTemplate.opsForValue().set("name", "虎哥");
// 获取string数据
Object name = redisTemplate.opsForValue().get("name");
System.out.println("name = " + name);
}
}
贴心小提示:SpringDataJpa使用起来非常简单,记住如下几个步骤即可
SpringDataRedis的使用步骤:
- 引入spring-boot-starter-data-redis依赖
- 在application.yml配置Redis信息
- 注入RedisTemplate
StringRedisTemplate
和 RedisTemplate
是 Spring Data Redis 中两个重要的操作 Redis 的模板类
Spring Data Redis 是一个用于简化 Redis 操作的框架,它提供了多种工具类来与 Redis 进行交互。StringRedisTemplate
和 RedisTemplate
是 Spring Data Redis 中两个重要的操作 Redis 的模板类,它们之间的关系如下:
继承关系
StringRedisTemplate
继承自RedisTemplate
。
泛型参数
RedisTemplate
是一个泛型类,通过指定泛型参数可以支持各种数据类型的操作。例如,可以设置为<String, String>
、<Object, Object>
或其他自定义类型。StringRedisTemplate
的泛型参数固定为<String, String>
,表示键和值都是字符串类型的数据。
序列化方式
RedisTemplate
默认使用JdkSerializationRedisSerializer
进行序列化和反序列化。这种序列化方式会将 Java 对象转化为字节数组,并存储在 Redis 中。因此,当从 Redis 中取出数据时,需要进行反序列化以恢复原始的 Java 对象。StringRedisTemplate
使用StringRedisSerializer
进行序列化和反序列化。由于它专门针对字符串类型的数据进行操作,因此在存储和读取字符串时不需要进行复杂的序列化和反序列化过程,这使得StringRedisTemplate
在处理字符串数据时更加高效。
操作方法
RedisTemplate
提供了 Redis 常见数据类型(如字符串、列表、集合、有序集合、散列)的操作方法。这些方法允许开发者执行各种 Redis 命令,如设置键值对、获取键值对、删除键值对等。此外,RedisTemplate
还支持批量插入和删除操作,以及事务处理等功能。StringRedisTemplate
除了提供与RedisTemplate
相同的基本操作外,还提供了一些针对字符串数据的特殊操作方法。例如,append
方法可以将指定的字符串追加到已存在的字符串的末尾;getBit
方法可以获取字符串值在指定位置上的位(0 或 1);decrement
和increment
方法可以对字符串值进行自减和自增操作等。这些特殊操作方法使得StringRedisTemplate
在处理字符串数据时更加方便和灵活。
使用场景
RedisTemplate
适用于操作多种 Redis 数据类型的情况。当项目中需要存储和操作不同类型的数据时(如对象、列表、集合等),可以选择使用RedisTemplate
并根据需要设置不同的泛型参数。StringRedisTemplate
适用于只需要操作字符串类型数据的情况。当项目中主要存储和操作的是字符串类型的数据时(如缓存数据、计数器),可以选择使用StringRedisTemplate
以提高效率和简化操作。
示例代码
使用 RedisTemplate
java复制
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
@Service
public class RedisService {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
public void saveValue(String key, Object value) {
redisTemplate.opsForValue().set(key, value);
}
public Object getValue(String key) {
return redisTemplate.opsForValue().get(key);
}
}
使用 StringRedisTemplate
java复制
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
@Service
public class RedisService {
@Autowired
private StringRedisTemplate stringRedisTemplate;
public void saveValue(String key, String value) {
stringRedisTemplate.opsForValue().set(key, value);
}
public String getValue(String key) {
return stringRedisTemplate.opsForValue().get(key);
}
}
总结
StringRedisTemplate
是RedisTemplate
的子类,专门用于操作字符串类型的数据。StringRedisTemplate
默认使用StringRedisSerializer
,在处理字符串数据时更加高效和方便。RedisTemplate
是一个通用的模板类,可以操作任意类型的数据,适用于需要处理多种数据类型的情况。
选择使用哪个类取决于项目的具体需求和数据类型。如果需要操作多种数据类型,则 RedisTemplate
更为合适;如果只需要操作字符串数据类型,则 StringRedisTemplate
更加高效和方便。
StringRedisTemplate默认使用
StringRedisSerializer`,在处理字符串数据时更加高效和方便。
RedisTemplate
是一个通用的模板类,可以操作任意类型的数据,适用于需要处理多种数据类型的情况。
选择使用哪个类取决于项目的具体需求和数据类型。如果需要操作多种数据类型,则 RedisTemplate
更为合适;如果只需要操作字符串数据类型,则 StringRedisTemplate
更加高效和方便。