1.5 Redis的Java客户端-SpringDataRedis

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封装到了不同的类型中:

1652976773295

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

StringRedisTemplateRedisTemplate 是 Spring Data Redis 中两个重要的操作 Redis 的模板类

Spring Data Redis 是一个用于简化 Redis 操作的框架,它提供了多种工具类来与 Redis 进行交互。StringRedisTemplateRedisTemplate 是 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);decrementincrement 方法可以对字符串值进行自减和自增操作等。这些特殊操作方法使得 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);
    }
}

总结

  • StringRedisTemplateRedisTemplate 的子类,专门用于操作字符串类型的数据。
  • StringRedisTemplate 默认使用 StringRedisSerializer,在处理字符串数据时更加高效和方便。
  • RedisTemplate 是一个通用的模板类,可以操作任意类型的数据,适用于需要处理多种数据类型的情况。

选择使用哪个类取决于项目的具体需求和数据类型。如果需要操作多种数据类型,则 RedisTemplate 更为合适;如果只需要操作字符串数据类型,则 StringRedisTemplate 更加高效和方便。
StringRedisTemplate默认使用StringRedisSerializer`,在处理字符串数据时更加高效和方便。

  • RedisTemplate 是一个通用的模板类,可以操作任意类型的数据,适用于需要处理多种数据类型的情况。

选择使用哪个类取决于项目的具体需求和数据类型。如果需要操作多种数据类型,则 RedisTemplate 更为合适;如果只需要操作字符串数据类型,则 StringRedisTemplate 更加高效和方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值