Spring Boot 中使用 Redis

前言

Spring Boot 中使用 Redis,具体有以下几个步骤:

  1. 添加依赖
  2. 编辑配置文件
  3. 编辑配置类

1. 添加 Redis 客户端的 Maven 依赖


xml 复制代码
<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

脚本很简单,但是有 2 个问题,需要我们探讨一下

  • 什么是Redis客户端
  • 什么是Spring Boot Starter

Spring Boot 项目中使用 Redis,需要使用对应的 Redis客户端

Redis客户端

能够与 Redis 服务器进行通信并执行数据操作的程序或工具 ,其核心作用是作为用户与 Redis 服务之间的交互接口。

常见的Redis 客户端 Java 库有:JedisLettuce

从性能、资源损耗等多个对比维度,来说,Lettuce会更有优势

spring-boot-starter-data-redis 默认的Redis客户端工具就是Lettuce

本文也是使用Lettuce作为Redis 客户端

那么,什么又是Spring Boot Starter呢?

它的翻译是:Spring Boot 场景启动器

作用是把当前场景要用的jar包都引入进来,简化依赖配置

命名格式

官方格式通常为:spring-boot-starter-*

第三方格式:*-spring-boot-starter


比如前面添加的spring-boot-starter-data-redis,我们就可以得知,它是Spring官方提供的一个场景启动器
每一个starter都有一个基础依赖:spring-boot-starter

2. 编辑 yaml 配置文件


yaml 复制代码
spring:
  redis:
    host: 192.168.0.1
    port: 6379
    password: 123321
    lettuce:
      pool:
        max-active: 10  #最大连接
        max-idle: 10   #最大空闲连接
        min-idle: 1   #最小空闲连接
        max-wait: 1s #连接等待时间
        time-between-eviction-runs: 30s # 定期检测空闲连接

主要是配置Redis连接信息,以及lecttuce连接池信息

Redis 连接池

一种 管理 Redis 连接的机制,用于避免频繁创建和销毁连接带来的性能开销,提升系统效率和资源利用率

可以视具体情况考虑是否使用连接池,以及调整连接池参数

3. 编辑配置类


java 复制代码
@Configuration
@Slf4j
public class RedisConfiguration {

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
        log.info("开始创建redis模板对象...");
        RedisTemplate redisTemplate = new RedisTemplate();
        // 设置redis的连接工厂对象
        // 在这步可以切换 redis 客户端,前提是定义好 redisConnectionFactory
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        
        // 设置redis key的序列化器
        redisTemplate.setKeySerializer(RedisSerializer.string());
        redisTemplate.setHashKeySerializer(RedisSerializer.string());
        // 设置redis value的序列化器
        // 自动添加 `@class` 类型信息,避免反序列化失败
        // 特征:序列化后有 class 信息
        redisTemplate.setValueSerializer(RedisSerializer.json());
        redisTemplate.setHashValueSerializer(RedisSerializer.json());
        return redisTemplate;
    }
}

我们着重关注对于Rdis序列化器改造,即

java 复制代码
redisTemplate.setKeySerializer(RedisSerializer.string());
redisTemplate.setHashKeySerializer(RedisSerializer.string());

redisTemplate.setValueSerializer(RedisSerializer.json());
redisTemplate.setHashValueSerializer(RedisSerializer.json());

注意 以上代码属于Spring Data Redis 2.2+推荐写法,如果你的Spring Data Redis版本较低,可以使用如下代替

java 复制代码
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());

redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());

为什么我们要自定义序列化器呢?

默认的序列化器,在redis中存储的数据是这样的

缺点很明显:可读性差,内存占用较大

自定义序列化器便是为了解决这些问题

当然,也有其他方式进行自定义序列化,比如Jackson2JsonRedisSerializerFastJson等方式,在此不做展开

测试


自此,我们便可以通过redisTemplate提供的相关方法进行使用了

java 复制代码
 @SpringBootTest
class RedisStringTests {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    void testString() {
        // 写入一条String数据
        redisTemplate.opsForValue().set("name", "Tom");
        // 获取string数据
        Object name = stringRedisTemplate.opsForValue().get("name");
        System.out.println("name = " + name);
    }
}
相关推荐
G_whang2 小时前
jenkins使用Jenkinsfile部署springboot+docker项目
spring boot·docker·jenkins
hac13226 小时前
Spring Boot 双数据源配置
java·spring boot·后端
金心靖晨7 小时前
redis汇总笔记
数据库·redis·笔记
Hello.Reader7 小时前
Redis性能基准测试
数据库·redis·junit
凤山老林7 小时前
Spring Boot中的中介者模式:终结对象交互的“蜘蛛网”困境
java·spring boot·后端·设计模式·中介者模式
鼠鼠我捏,要死了捏9 小时前
基于Redis Streams的实时消息处理实战经验分享
redis·消息队列·redis streams
java_强哥9 小时前
Spring Boot启动原理:从main方法到内嵌Tomcat的全过程
spring boot·后端·tomcat
李剑一9 小时前
上传三个参数,两个接收正常,一个死活都是null?
spring boot·后端
neoooo9 小时前
Redis锁得住,世界就是你的:一探Redis分布式锁的原理、姿势与深度思考
java·redis·后端