Loading... # 在Spring Cloud中将Redis共用到Common模块 ## 前言 在分布式系统中,共用组件的设计可以极大地提升代码复用性和维护性。Spring Cloud中将Redis共用到一个公共模块(common模块)是一个常见的设计实践,这样可以让多个微服务共享相同的Redis配置和操作逻辑。本文将详细介绍如何在Spring Cloud中实现这一目标。 ![](https://www.8kiz.cn/usr/uploads/2024/06/135111650.png) ## 项目结构 首先,定义项目的结构: ``` spring-cloud-redis-common │ ├── common-module │ ├── src │ │ ├── main │ │ │ ├── java │ │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── common │ │ │ │ ├── RedisConfig.java │ │ │ │ ├── RedisService.java │ │ │ │ └── model │ │ │ │ └── CacheItem.java │ │ │ └── resources │ │ │ └── application.properties │ └── pom.xml │ └── service-module ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ └── example │ │ │ └── service │ │ │ └── ServiceApplication.java │ │ └── resources │ │ └── application.properties └── pom.xml ``` ## Common模块的实现 ### 1. 定义Redis配置 在 `common-module`中创建 `RedisConfig.java`,配置Redis连接: ```java package com.example.common; 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.core.StringRedisTemplate; @Configuration public class RedisConfig { @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(factory); return template; } @Bean public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory factory) { return new StringRedisTemplate(factory); } } ``` ### 2. 定义Redis操作服务 在 `common-module`中创建 `RedisService.java`,提供Redis操作方法: ```java package com.example.common; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import java.util.concurrent.TimeUnit; @Service public class RedisService { @Autowired private RedisTemplate<String, Object> redisTemplate; public void set(String key, Object value, long timeout, TimeUnit unit) { redisTemplate.opsForValue().set(key, value, timeout, unit); } public Object get(String key) { return redisTemplate.opsForValue().get(key); } public void delete(String key) { redisTemplate.delete(key); } } ``` ### 3. 定义数据模型 在 `common-module`中创建 `CacheItem.java`,定义数据模型: ```java package com.example.common.model; import java.io.Serializable; public class CacheItem implements Serializable { private String id; private String value; // getters and setters } ``` ### 4. 配置文件 在 `common-module`的 `resources`目录下添加 `application.properties`: ```properties spring.redis.host=localhost spring.redis.port=6379 ``` ### 5. 添加依赖 在 `common-module`的 `pom.xml`中添加Spring Data Redis依赖: ```xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> </dependencies> ``` ## Service模块的实现 ### 1. 添加依赖 在 `service-module`的 `pom.xml`中添加对 `common-module`的依赖: ```xml <dependencies> <dependency> <groupId>com.example</groupId> <artifactId>common-module</artifactId> <version>1.0.0</version> </dependency> </dependencies> ``` ### 2. 使用Common模块中的Redis服务 在 `service-module`中创建 `ServiceApplication.java`,使用 `RedisService`: ```java package com.example.service; import com.example.common.RedisService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class ServiceApplication implements CommandLineRunner { @Autowired private RedisService redisService; public static void main(String[] args) { SpringApplication.run(ServiceApplication.class, args); } @Override public void run(String... args) throws Exception { redisService.set("testKey", "testValue", 1, TimeUnit.HOURS); System.out.println("Stored value: " + redisService.get("testKey")); } } ``` ### 3. 配置文件 在 `service-module`的 `resources`目录下添加 `application.properties`,以覆盖common模块中的配置: ```properties spring.redis.host=localhost spring.redis.port=6379 ``` ## 分析说明表 | 步骤 | 描述 | 示例代码 | | ----------------- | ------------------------------------------------------- | ---------------------------------- | | 定义Redis配置 | 创建Redis配置类,定义RedisTemplate和StringRedisTemplate | `RedisConfig.java` | | 定义Redis操作服务 | 创建RedisService类,提供常用的Redis操作方法 | `RedisService.java` | | 定义数据模型 | 创建CacheItem类,定义缓存项的数据结构 | `CacheItem.java` | | 配置文件 | 在common模块中添加Redis配置 | `application.properties` | | 添加依赖 | 在common和service模块的pom.xml中添加必要的依赖 | `spring-boot-starter-data-redis` | | 使用Redis服务 | 在service模块中使用common模块提供的RedisService | `ServiceApplication.java` | ## 结论 通过将Redis配置和操作服务提取到Common模块,可以在Spring Cloud微服务架构中实现高效的代码复用和统一管理。这种设计不仅简化了各个服务的配置和依赖管理,还提高了代码的可维护性和可读性。希望本文对你在Spring Cloud项目中集成和使用Redis有所帮助。 最后修改:2024 年 06 月 09 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏