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);
    }
}
相关推荐
suaizai_1 小时前
Fastjson高危漏洞紧急修复指南
spring boot
正儿八经的少年5 小时前
布隆过滤器(解决redis缓存穿透步骤之一)
数据库·redis·缓存
gugucoding9 小时前
59. 【Java】Spring Boot 入门:第一个 Web 应用
java·开发语言·spring boot
宠友信息12 小时前
内容社区源码开发实践解析,用Spring Boot打造1:1仿小红书源码平台
java·spring boot·redis·websocket·mysql·spring·uni-app
hweiyu0012 小时前
Redis命令:GET
redis
Su米苏12 小时前
Redis高级用法
spring boot·redis
paopaokaka_luck13 小时前
基于springboot3+vue3的车间生产管理系统(Echarts图形化分析、BI报表)
java·前端·spring boot·学习·echarts
摇滚侠16 小时前
《SpringBoot 3:入门与应用实战》第 7 章 AOP 思想与实现 阅读笔记 13
java·spring boot·笔记
FYKJ_201016 小时前
springboot网上购书商城---附源码15749
java·spring boot·后端·python·spark·django·php
爱学堂IT分享16 小时前
码神之路-Netty-从零实现RPC框架+SpringBoot实战项目教程
spring boot·网络协议·rpc