分布式系统开发(2)——Redis 缓存与分布式锁
2026/6/10 4:07:24 网站建设 项目流程

系列文章:
分布式系统开发(1)——MinIO 对象存储
分布式系统开发(2)——Redis 缓存与分布式锁

分布式系统开发(3)——RabbitMQ独立模块

分布式系统开发(4)——Dubbo+Zookeeper(RPC服务)

分布式系统开发(5)——整合所有组件

分布式系统开发(6)——项目打包部署与Nginx代理前端


接上一篇文章,分布式系统开发(1)——MinIO 对象存储
本文在上文基础上开发。

本文先要启动Redis(默认配置)。
Redis下载和启动教程可以查看:Windows下安装运行Redis

环境:
IDEA :2026.1
JDK:17
maven:3.9.x
redis:3.x

1.创建ds-redis模块


名称写 ds-redis,构建系统选:maven,JDK这里选17,然后点击”创建“

2.新增依赖

打开当前模块的依赖pom.xml

注意是当前模块,不是父模块,然后添加下面的代码

<dependencies><!-- SpringDataRedis--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!--连接池--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId></dependency></dependencies>

添加完后,刷新依赖。

这里说要一下:因为父工程继承了 spring-boot-starter-parent,它已经通过 管理了大量 Spring Boot 相关依赖的版本(包括 spring-boot-starter-data-redis 和 commons-pool2),所以父工程中并没有加入spring-boot-start-data-redis和commons-pool2。但是子模块使用的时候需要注明一下。

3.新增配置文件application.yml

右击本模块的resources文件夹,选择”新建“—>“文件”


文件的名字为:application.yml

参考代码如下:

server:port:8082spring:application:name:redis-demo# 应用名# Redis 配置data:redis:host:localhostport:6379password:# 你的Redis密码database:0# 库索引timeout:5000mslettuce:pool:max-active:8max-idle:8min-idle:0max-wait:1000ms

配置完界面后如下:

说明:这个配置文件的原则是”谁用谁配置“,最后一章节整合的时候,会把这个模块删除,配置文件也会删除。到时候,其他模块谁需要使用reids,就在其所在模块的配置文件中 定义上面redis的相关配置即可。
本文只是为了单独演示模块功能。

4.新增配置类RedisConfig

右击当前模块的java文件夹,选择”新建“—>“软件包”

这里软件包名为:com.guo.redis.config

然后继续右击创建 的config文件夹,选择”新建“—>“Java类”

类名为RedisConfig

参考相关代码如下:

importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.data.redis.connection.RedisConnectionFactory;importorg.springframework.data.redis.core.RedisTemplate;importorg.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;importorg.springframework.data.redis.serializer.RedisSerializer;@ConfigurationpublicclassRedisConfig{//配置 RedisTemplate//RedisConnectionFactory 是Spring 中创建、管理 Redis 连接的工厂,负责根据配置建立 Redis 连接(读取配置文件)@BeanpublicRedisTemplate<String,Object>redisTemplate(RedisConnectionFactoryfactory){RedisTemplate<String,Object>template=newRedisTemplate<>();//创建 RedisTemplate 对象(操作 Redis 的核心工具)template.setConnectionFactory(factory);//绑定 Redis 连接工厂(让它能连上 Redis)// 定义序列化工具RedisSerializer<String>stringSerializer=RedisSerializer.string();// 创建【JSON 序列化器】// 作用:把 Java 对象转成 JSON 存进 Redis// 取出来又能自动转回对象GenericJackson2JsonRedisSerializerjsonSerializer=newGenericJackson2JsonRedisSerializer();// key 序列化template.setKeySerializer(stringSerializer);//key 一律使用字符串序列化(普通 Redis 键)template.setHashKeySerializer(stringSerializer);//hash 类型的 key 也用字符串序列化// value 序列化template.setValueSerializer(jsonSerializer);//value 使用 JSON 序列化template.setHashValueSerializer(jsonSerializer);//hash 类型的 value 也用 JSON 序列化//让配置生效template.afterPropertiesSet();returntemplate;}}

创建完后项目截图如下:

注意:上面的 factory 地下出现红色波浪线在此处没有问题,暂时不用处理。

5. 封装工具类RedisUtil

注意,这一步并非一定要做,也可以用@Cache注解实现。
区别是@Cacheable = 自动查询缓存,一行注解,不用写 Redis 代码
RedisUtils = 手动操作 Redis,灵活强大,适合复杂场景。

本文先使用RedisUtils实现。

右击本项目的redis文件夹,选择”新建“——>"软件包”

软件包名为:com.guo.redis.utils


然后继续右击刚才创建的utils文件夹,选择“新建”—>“Java类”

类名为:RedisUtil

参考代码如下:

importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.data.redis.core.RedisTemplate;importorg.springframework.stereotype.Component;importjava.util.Arrays;importjava.util.List;importjava.util.Map;importjava.util.Set;importjava.util.concurrent.TimeUnit;@ComponentpublicclassRedisUtil{@AutowiredprivateRedisTemplate<String,Object>redisTemplate;// ==================== 公共方法 ====================/** * 指定缓存过期时间 * @param key 键 * @param time 时间(秒) */publicbooleanexpire(Stringkey,longtime){try{if(time>0){redisTemplate.expire(key,time,TimeUnit.SECONDS);}returntrue;}catch(Exceptione){e.printStackTrace();returnfalse;}}/** * 根据key获取过期时间 */publiclonggetExpire(Stringkey){returnredisTemplate.getExpire(key,TimeUnit.SECONDS);}/** * 判断key是否存在 */publicbooleanhasKey(Stringkey){try{returnredisTemplate.hasKey(key);}catch(Exceptione){e.printStackTrace();returnfalse;}}/** * 删除缓存 */publicvoiddel(String...key){if(key!=null&&key.length>0){if(key.length==1){redisTemplate.delete(key[0]);}else{redisTemplate.delete(Arrays.asList(key));}}}// ==================== String 类型 ====================/** * 获取缓存 */publicObjectget(Stringkey){returnkey==null?null:redisTemplate.opsForValue().get(key);}/** * 设置缓存 */publicbooleanset(Stringkey,Objectvalue){try{redisTemplate.opsForValue().set(key,value);returntrue;}catch(Exceptione){e.printStackTrace();returnfalse;}}/** * 设置缓存并设置时间 */publicbooleanset(Stringkey,Objectvalue,longtime){try{if(time>0){redisTemplate.opsForValue().set(key,value,time,TimeUnit.SECONDS);}else{set(key,value);}returntrue;}catch(Exceptione){e.printStackTrace();returnfalse;}}/** * 递增 */publiclongincr(Stringkey,longdelta){if(delta<0){thrownewRuntimeException("递增因子必须大于0");}returnredisTemplate.opsForValue().increment(key,delta);}/** * 递减 */publiclongdecr(Stringkey,longdelta){if(delta<0){thrownewRuntimeException("递减因子必须大于0");}returnredisTemplate.opsForValue().increment(key,-delta);}// ==================== Map 类型 ====================publicObjecthget(Stringkey,Stringitem){returnredisTemplate.opsForHash().get(key,item);}publicMap<Object,Object>hmget(Stringkey){returnredisTemplate.opsForHash().entries(key);}publicbooleanhmset(Stringkey,Map<String,Object>map){try{redisTemplate.opsForHash().putAll(key,map);returntrue;}catch(Exceptione){e.printStackTrace();returnfalse;}}// ==================== Set 类型 ====================publicSet<Object>sGet(Stringkey){try{returnredisTemplate.opsForSet().members(key);}catch(Exceptione){e.printStackTrace();returnnull;}}// ==================== List 类型 ====================publicList<Object>lGet(Stringkey,longstart,longend){try{returnredisTemplate.opsForList().range(key,start,end);}catch(Exceptione){e.printStackTrace();returnnull;}}}

添加完后,项目截图如下:

6.新增启动类

右击redis文件夹,选择“新建”—>“Java类”

启动类的名字为:RedisApplication

然后参考代码如下:

packagecom.guo.redis;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublicclassRedisApplication{publicstaticvoidmain(String[]args){SpringApplication.run(RedisApplication.class,args);}}

7.新增测试代码

这里新增一段测试代码,注意,右击 test文件夹下面的java文件夹,选择“新建”—>“Java类”

测试类的类名为:RedisApplicationTests


参考代码如下:

importcom.guo.redis.RedisApplication;importcom.guo.redis.utils.RedisUtil;importjakarta.annotation.Resource;importorg.junit.jupiter.api.Test;importorg.springframework.boot.test.context.SpringBootTest;@SpringBootTest(classes=RedisApplication.class)publicclassRedisApplicationTests{@ResourceprivateRedisUtilredisUtil;@TestvoidcontextLoads(){}//测试新增@Testpublicvoidset(){redisUtil.set("name","张三",60);// 60秒过期System.out.println("设置成功");}//测试查询@Testpublicvoidget(){Objectobject=redisUtil.get("name");System.out.println("查询结果:"+object);}//测试删除@Testpublicvoiddel(){redisUtil.del("name");System.out.println("删除成功");}//测试过期时间@Testpublicvoidexpire(){redisUtil.expire("name",15);System.out.println("设置成功");}//测试是否存在@TestpublicvoidhasKey(){booleanhasKey=redisUtil.hasKey("name");System.out.println("是否存在"+hasKey);}}

添加完后界面如下:

8.执行测试

先执行第一个测试,set方法,往redis中写入数据。

然后再执行get方法,查看redis中的数据。

注意,要在60秒内进行查询, 不然超时会删掉数据,查询出来会是null

本文参考代码:ds-demo2.zip链接:
https://pan.baidu.com/s/1FFQVzUp1SslY3EYph7z5xA?pwd=4vm2

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询