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);
    }
}
相关推荐
NCIN EXPE1 小时前
redis 使用
数据库·redis·缓存
lUie INGA2 小时前
在2023idea中如何创建SpringBoot
java·spring boot·后端
hERS EOUS2 小时前
nginx 代理 redis
运维·redis·nginx
geBR OTTE2 小时前
SpringBoot中整合ONLYOFFICE在线编辑
java·spring boot·后端
of Watermelon League3 小时前
SpringBoot集成Flink-CDC,实现对数据库数据的监听
数据库·spring boot·flink
NoSi EFUL3 小时前
redis存取list集合
windows·redis·list
Deepincode4 小时前
Redis源码探究系列—SDS 扩容策略与内存预分配机制
redis
eLIN TECE4 小时前
springboot和springframework版本依赖关系
java·spring boot·后端
仙草不加料4 小时前
互联网大厂Java面试故事实录:三轮场景化技术提问与详细答案解析
java·spring boot·微服务·面试·aigc·电商·内容社区
程序员老邢5 小时前
【技术底稿 19】Redis7 集群密码配置 + 权限锁死 + 磁盘占满连锁故障真实排查全记录
java·服务器·经验分享·redis·程序人生·微服务