首页 > 数据库 >【详解】Spring整合Redis

【详解】Spring整合Redis

时间:2025-01-04 21:59:52浏览次数:3  
标签:redis Spring Redis springframework 详解 org import RedisTemplate

目录

Spring整合Redis

1. 环境准备

1.1 技术栈

1.2 工具

2. 添加依赖

3. 配置Redis

4. 创建Redis配置类

5. 使用RedisTemplate

6. 测试

7. 总结

1. 添加依赖

2. 配置Redis连接

3. 创建Redis配置类

4. 创建服务类

5. 创建控制器

6. 启动应用

7. 测试API

1. 添加依赖

2. 配置Redis连接

application.properties

application.yml

3. 创建Redis配置类

4. 使用RedisTemplate

5. 运行和测试


Spring整合Redis

在现代Web应用开发中,缓存技术是提高应用性能的关键因素之一。Redis作为一个高性能的键值存储系统,被广泛应用于各种场景中,如数据缓存、消息队列等。本文将介绍如何在Spring框架中整合Redis,实现数据的高效读取和存储。

1. 环境准备

1.1 技术栈
  • Spring Boot:2.5.0
  • Redis:6.0.9
  • Java:11
1.2 工具
  • IDEA:2021.1
  • Maven:3.8.1

2. 添加依赖

首先,在​​pom.xml​​文件中添加Spring Data Redis和Jedis(Redis客户端)的依赖:

<dependencies>
    <!-- Spring Boot Starter Data Redis -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <!-- Jedis Client -->
    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
    </dependency>
</dependencies>

3. 配置Redis

在​​application.properties​​或​​application.yml​​文件中配置Redis连接信息:

spring:
  redis:
    host: 127.0.0.1
    port: 6379
    password: 
    database: 0
    jedis:
      pool:
        max-active: 8
        max-wait: -1ms
        max-idle: 8
        min-idle: 0

4. 创建Redis配置类

创建一个配置类来配置RedisTemplate,以便在项目中使用自定义的序列化方式:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(factory);

        // 设置键的序列化方式
        template.setKeySerializer(new StringRedisSerializer());
        // 设置值的序列化方式
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());

        // 设置哈希键的序列化方式
        template.setHashKeySerializer(new StringRedisSerializer());
        // 设置哈希值的序列化方式
        template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());

        template.afterPropertiesSet();
        return template;
    }
}

5. 使用RedisTemplate

在需要使用Redis的地方,通过​​@Autowired​​注入​​RedisTemplate​​,并使用其提供的方法进行操作:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    public void setUser(String key, User user) {
        redisTemplate.opsForValue().set(key, user);
    }

    public User getUser(String key) {
        return (User) redisTemplate.opsForValue().get(key);
    }
}

6. 测试

创建一个测试类来验证Redis的集成是否成功:

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class UserServiceTest {

    @Autowired
    private UserService userService;

    @Test
    public void testSetAndGetUser() {
        User user = new User("1", "张三");
        userService.setUser("user:1", user);

        User retrievedUser = userService.getUser("user:1");
        System.out.println(retrievedUser);
    }
}

7. 总结

通过上述步骤,我们成功地在Spring Boot项目中集成了Redis,并实现了基本的数据存储和读取功能。Redis的强大之处在于其高性能和丰富的数据结构支持,这使得它成为缓存和消息队列等场景的理想选择。

希望本文对大家有所帮助,如果有任何问题或建议,欢迎留言交流!

以上就是关于Spring整合Redis的技术博客文章,希望能对你的学习和工作有所帮助。当然可以!Spring框架与Redis的整合在现代Web应用中非常常见,特别是在需要缓存数据以提高性能的情况下。下面是一个简单的示例,展示如何在Spring Boot应用中集成Redis,并使用它来存储和检索数据。

1. 添加依赖

首先,在你的​​pom.xml​​文件中添加Spring Boot Starter Data Redis依赖:

<dependencies>
    <!-- Spring Boot Starter Data Redis -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>

    <!-- Spring Boot Starter Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Lombok for simplifying Java code -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>
2. 配置Redis连接

在​​application.properties​​或​​application.yml​​文件中配置Redis连接信息:

# application.properties
spring.redis.host=localhost
spring.redis.port=6379

或者使用YAML格式:

# application.yml
spring:
  redis:
    host: localhost
    port: 6379
3. 创建Redis配置类

创建一个配置类来配置RedisTemplate,这将用于与Redis进行交互:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(factory);
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new StringRedisSerializer());
        return template;
    }
}
4. 创建服务类

创建一个服务类来处理与Redis的交互逻辑:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

@Service
public class CacheService {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    public void setCacheData(String key, Object value) {
        redisTemplate.opsForValue().set(key, value);
    }

    public Object getCacheData(String key) {
        return redisTemplate.opsForValue().get(key);
    }

    public void deleteCacheData(String key) {
        redisTemplate.delete(key);
    }
}
5. 创建控制器

创建一个控制器来暴露REST API,以便客户端可以与缓存服务进行交互:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/cache")
public class CacheController {

    @Autowired
    private CacheService cacheService;

    @PostMapping("/set")
    public String setCacheData(@RequestParam String key, @RequestParam String value) {
        cacheService.setCacheData(key, value);
        return "Data cached successfully";
    }

    @GetMapping("/get")
    public Object getCacheData(@RequestParam String key) {
        return cacheService.getCacheData(key);
    }

    @DeleteMapping("/delete")
    public String deleteCacheData(@RequestParam String key) {
        cacheService.deleteCacheData(key);
        return "Data deleted from cache";
    }
}
6. 启动应用

最后,创建一个主类来启动Spring Boot应用:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class RedisDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(RedisDemoApplication.class, args);
    }
}
7. 测试API

你可以使用Postman或其他HTTP客户端来测试这些API:

  • Set Cache Data: ​​POST /cache/set?key=myKey&value=myValue​
  • Get Cache Data: ​​GET /cache/get?key=myKey​
  • Delete Cache Data: ​​DELETE /cache/delete?key=myKey​

这样,你就完成了一个简单的Spring Boot应用与Redis的整合示例。希望这个示例对你有帮助!如果有任何问题或需要进一步的解释,请随时告诉我。在Spring框架中整合Redis可以极大地提升应用的性能和响应速度,尤其是在处理高并发场景时。Redis作为一款高性能的键值对存储系统,常被用作缓存、消息队列等。Spring框架提供了​​spring-data-redis​​模块来简化与Redis的集成工作。

1. 添加依赖

首先,在你的项目中添加Spring Data Redis的依赖。如果你使用的是Maven,可以在​​pom.xml​​文件中添加如下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <version>2.7.0</version> <!-- 请根据实际情况调整版本 -->
</dependency>

如果使用Gradle,可以在​​build.gradle​​文件中添加:

implementation 'org.springframework.boot:spring-boot-starter-data-redis:2.7.0' // 请根据实际情况调整版本
2. 配置Redis连接

在​​application.properties​​或​​application.yml​​中配置Redis的连接信息:

application.properties
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=
spring.redis.database=0
application.yml
spring:
  redis:
    host: localhost
    port: 6379
    password:
    database: 0
3. 创建Redis配置类

你可以创建一个配置类来配置​​RedisTemplate​​,这是Spring提供的用于操作Redis的模板类。通过自定义​​RedisTemplate​​,你可以指定序列化方式等配置。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(factory);

        // 使用Jackson2JsonRedisSerializer来序列化和反序列化value对象
        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
        
        // 设置key和hashKey的序列化方式为StringRedisSerializer
        template.setKeySerializer(new StringRedisSerializer());
        template.setHashKeySerializer(new StringRedisSerializer());
        
        // 设置value和hashValue的序列化方式为Jackson2JsonRedisSerializer
        template.setValueSerializer(jackson2JsonRedisSerializer);
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        
        template.afterPropertiesSet();
        return template;
    }
}
4. 使用RedisTemplate

在需要使用Redis的地方,可以通过​​@Autowired​​注解注入​​RedisTemplate​​,然后使用它来进行各种操作,如设置、获取、删除等。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    public void setUser(String key, User user) {
        redisTemplate.opsForValue().set(key, user);
    }

    public User getUser(String key) {
        return (User) redisTemplate.opsForValue().get(key);
    }

    public void deleteUser(String key) {
        redisTemplate.delete(key);
    }
}
5. 运行和测试

启动你的Spring Boot应用,并进行相应的测试,确保Redis能够正常工作。你可以在控制台中看到Redis的操作日志,也可以使用Redis客户端工具(如Redis Desktop Manager)来查看Redis中的数据。

以上就是Spring整合Redis的基本步骤和示例代码。希望这些信息对你有帮助!如果有任何问题或需要进一步的帮助,请随时告诉我。

标签:redis,Spring,Redis,springframework,详解,org,import,RedisTemplate
From: https://blog.csdn.net/q7w8e9r4/article/details/144935674

相关文章

  • 面试提问:Redis为什么快?
    Redis为什么快?引言Redis是一个高性能的开源内存数据库,以其快速的读写速度和丰富的数据结构支持而闻名。本文将探讨Redis快速处理数据的原因,帮助大家更好地理解Redis的内部机制和性能优化技术。目录完全基于内存高效的内存数据结构单线程模型I/O多路复用技术简单高效的通......
  • 跟着问题学3.3——Faster R-CNN详解及代码实战(1)
    FastR-CNN的不足选取区域使用的算法是固定的,不参与学习选取区域的算法本身消耗比较高(搜索选择法)选取区域的算法选出来的区域大部分都是重合的,并且只有很小一部分包含我们想要识别的对象区域范围的精度比较低(即使经过调整)判断分类有时只能使用部分包含对象的区域(例如......
  • 详解 opengl 语法
    以下是OpenGL语法的详解,分为核心功能、常见函数的用法以及它们在OpenGL渲染管线中的位置。OpenGL是一个状态机,许多操作都是围绕上下文状态进行的。1.OpenGL基本结构OpenGL的主要功能是通过调用一系列的API,完成三维图形的绘制。主要包括以下几个步骤:初始化Open......
  • 100个python经典面试题详解(新版)
    应老粉要求,每晚加餐一个最新面试题包括Python面试中常见的问题,涵盖列表、元组、字符串插值、比较操作符、装饰器、类与对象、函数调用方式、数据结构操作、序列化、数据处理函数等多个方面。旨在帮助数据科学家和软件工程师准备面试或提升Python技能。33、面试题分析:字典和......
  • Spring Boot 2 (七):Spring Boot 如何解决项目启动时初始化资源
    在我们实际工作中,总会遇到这样需求,在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等。今天就给大家介绍一个SpringBoot神器,专门帮助大家解决项目启动初始化资源操作。这个神器就是 CommandLineRunner,CommandLineRunner 接口的 Component ......
  • 基于SpringBoot和Thymeleaf的仿小米电商系统源码下载与安装指南-幽络源
    项目概述这是一个基于SpringBoot2.X和Thymeleaf技术栈的仿小米电商系统。该项目包括了前台商城系统和后台管理系统,经幽络源测试具备完整的电商功能,适合用作学习、参考或作为开发电商系统的基础。前台商城系统:包括首页登录、商品分类、新品上线、首页轮播、商品推荐、......
  • 381_基于springboot的粉丝公益应援服务平台
    目录系统展示开发背景代码实现项目案例 获取源码博主介绍:CodeMentor毕业设计领航者、全网关注者30W+群落,InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者,博客领航之星、开发者头条/腾讯云/AWS/Wired等平台优选内容创作者、深耕Web......
  • 382_基于springboot的网络选课管理系统
    目录系统展示开发背景代码实现项目案例 获取源码博主介绍:CodeMentor毕业设计领航者、全网关注者30W+群落,InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者,博客领航之星、开发者头条/腾讯云/AWS/Wired等平台优选内容创作者、深耕Web......
  • 基于Springboot+Vue装修验收管理系统设计与实现(源码+论文+部署讲解)
    ......
  • 基于Spring Boot+vue 办公权限管理系统设计与实现(源码+论文+PPT+部署讲解)
    ......