如何自定义redis工具jar包供其他SpringBoot项目直接使用
知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个数据库开发实战,手把手教大家学习《如何自定义redis工具jar包供其他SpringBoot项目直接使用》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟!
注:(最终redis数据库连接信息由使用者项目模块配置提供)
一、Redis常用存储操作实现(redis-util模块,该module最后会打包成jar供其他服务使用)
1.引用相关依赖
<!-- 如果有继承父级spring-boot-starter-parent,可不用添加版本号 --> <!-- Redis缓存 [start] --> <dependency><groupid>org.springframework.boot</groupid><artifactid>spring-boot-starter-data-redis</artifactid><version>2.3.0.RELEASE</version></dependency><!-- Redis缓存 [end] -->
2.配置reids连接信息
注:由于此时还处于redis-util工具包开发阶段,所以reids的配置文件还是由自己的模块来提供,后期打包成jar时,会清除redis-util工具包里的redis连接信息,然后由需要使用redis-util工具的服务模块提供reids的连接信息;
在reids-util的application.properties里配置redis数据库连接信息
#Redis服务器地址 spring.redis.host=127.0.0.1 #Redis服务器连接端口 spring.redis.port=6379 #Redis数据库索引(默认为0) spring.redis.database=0
3.自定义序列化类,将存储在Redis的对象序列化为json格式
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.io.Serializable;
@Configuration
@EnableAutoConfiguration
public class RedisConfig {
@Bean
public RedisTemplate<string serializable> redisTemplate(LettuceConnectionFactory redisConnectionFactory){
RedisTemplate<string serializable> template = new RedisTemplate();
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
template.setConnectionFactory(redisConnectionFactory);
return template;
}
}</string></string>
4.开发相应的redis常用方法
package com.gh.redis.util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Repository;
import org.springframework.util.CollectionUtils;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@Repository
public class RedisUtil {
@Autowired
RedisTemplate<string serializable> redisTemplate; // key-value是对象的
public RedisUtil(){
}
/**
* 判断是否存在key
* @param key 主键
* @return true或false
*/
public boolean hasKey(String key) {
return Boolean.TRUE.equals(redisTemplate.hasKey(key));
}
/**
* 新增、修改Redis键值
* @param key 主键
* @param value 值
*/
public void insertOrUpdate(String key, Serializable value) {
redisTemplate.opsForValue().set(key, value);
}
/**
* 新增、修改Redis键值,并设置有效时间(秒)
* @param key 主键
* @param value 值
* @param seconds 有效时间(秒)
*/
public void insertOrUpdateBySeconds(String key, Serializable value, long seconds) {
redisTemplate.opsForValue().set(key, value, seconds, TimeUnit.SECONDS);
}
/**
* 新增、修改Redis键值,并设置有效时间(分)
* @param key 主键
* @param value 值
* @param minutes 有效时间(分)
*/
public void insertOrUpdateByMinutes(String key, Serializable value, long minutes) {
redisTemplate.opsForValue().set(key, value, minutes, TimeUnit.MINUTES);
}
/**
* 新增、修改Redis键值,并设置有效时间(小时)
* @param key 主键
* @param value 值
* @param hours 有效时间(小时)
*/
public void insertOrUpdateByHours(String key, Serializable value, long hours) {
this.redisTemplate.opsForValue().set(key, value, hours, TimeUnit.HOURS);
}
/**
* 新增、修改Redis键值,并设置有效时间(天)
* @param key 主键
* @param value 值
* @param days 有效时间(天)
*/
public void insertOrUpdateByDays(String key, Serializable value, long days) {
this.redisTemplate.opsForValue().set(key, value, days, TimeUnit.DAYS);
}
/**
* 通过主键获取值
* @param key 主键
* @return
*/
public Object get(String key) {
return redisTemplate.opsForValue().get(key);
}
/**
* 获取redis的所有key里包含pattern字符的key集
* @param pattern 模糊查询字符
* @return
*/
public Set<string> getPattern(String pattern) {
return redisTemplate.keys("*" + pattern + "*");
}
/**
* 删除指定redis缓存
* @param key 主键
* @return
*/
public boolean remove(String key) {
return Boolean.TRUE.equals(redisTemplate.delete(key));
}
/**
* 删除指定的多个缓存
* @param keys 主键1,主键2,...
* @return 删除主键数
*/
public int removes(String... keys){
int count = 0;
List<string> deleteFails = new ArrayList();
for (String key : keys) {
if (Boolean.TRUE.equals(redisTemplate.delete(key))) {
++count;
} else {
deleteFails.add(key);
}
}
if (!CollectionUtils.isEmpty(deleteFails)) {
System.err.println("======> Redis缓存删除失败的key:" + deleteFails.toString());
}
return count;
}
/**
* 删除所有的键值对数据
* @return 清除键值对数据量
*/
public int removeAll(){
Set<string> keys = redisTemplate.keys("*");
Long delete = 0L;
if (keys != null) {
delete = redisTemplate.delete(keys);
}
return delete != null ? delete.intValue() : 0;
}
}</string></string></string></string>
5.工具包开发完成,测试一下
import com.gh.common.toolsclass.ResultData;
import com.gh.redis.util.RedisUtil;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.Set;
@SpringBootTest
class RedisApplicationTests {
@Autowired
private RedisUtil redisUtil;
@Test
void test1() {
ResultData resultData = new ResultData();
resultData.setCode(0);
resultData.setMessage("redis测试");
resultData.setData("666666");
redisUtil.insertOrUpdate("demo", resultData);
System.err.println(redisUtil.hasKey("demo"));
Object demo = redisUtil.get("demo");
ResultData bo = (ResultData) demo;
System.err.println(bo.toString());
}
@Test
void test2() {
Set<string> list = redisUtil.getPattern("l");
for (String s: list) {
System.err.println(s);
}
}
}</string>
其中ResultData是自定义的一个用于返回信息的对象,可用其他对象替代,但是该对象需要实现Serializable接口(ResultData implements Serializable)
运行test1:

运行test2:

其他方法自行测试,这里不一 一展示;
6.清除redis数据库连接信息
自此redis-util工具包开发完成,可供其他服务使用,最后清除redis-util模块application.properties里的redis数据库连接信息。之后的连接信息由使用者模块提供,这样才符合redis-util作为一个纯工具包的定义。
二、创建一个consumer项目来引用redis-util工具包
1.在consumer项目的pom.xml中添加reids-utils的依赖
<!-- redis工具包 [start] --> <dependency><groupid>com.gh</groupid><artifactid>redis-util</artifactid><version>0.0.1-SNAPSHOT</version></dependency><!-- redis工具包 [end] -->
pom如何引用自定义jar包依赖自行百度,如果在同一父工程模块下,可直接这么引用。不在同一父工程,需要先将jar包放到maven仓库。
2.在consumer的application.properties配置文件里添加redis数据的连接信息
#Redis服务器地址 spring.redis.host=127.0.0.1 #Redis服务器连接端口 spring.redis.port=6379 #Redis数据库索引(默认为0) spring.redis.database=0
3.测试在cunsumer里是否可以使用redis-util工具包的方法
package com.gh.consumer;
import com.gh.common.toolsclass.ResultData;
import com.gh.redis.util.RedisUtil;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class ConsumerApplicationTests {
// 这里使用该构造器注入的方式,因为使用变量注入
final RedisUtil redisUtil;
@Autowired
public ConsumerApplicationTests(RedisUtil redisUtil){
this.redisUtil = redisUtil;
}
@Test
void test1() {
// 如果存在demo缓存,就删除
if (redisUtil.hasKey("demo")) {
System.err.println(redisUtil.remove("demo"));
}
// 插入新的demo缓存
ResultData resultData = new ResultData();
resultData.setCode(0);
resultData.setMessage("redis测试-2");
resultData.setData("888888");
redisUtil.insertOrUpdate("demo", resultData);
Object demo = redisUtil.get("demo");
ResultData bo = (ResultData) demo;
System.err.println(bo.toString());
}
@Test
void test2() {
redisUtil.insertOrUpdate("test", "redis工具测试");
System.err.println(redisUtil.get("test"));
}
}
运行test1,此时会发现控制台提示找不到RedisUtil的bean

4.在启动类添加扫描
其他注解不用管,解决redis-util工具包bean扫描不到的问题,只需要添加注解@ComponentScan(value = “com.gh.redis.*”)就好
package com.gh.consumer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScans;
import org.springframework.scheduling.annotation.EnableScheduling;
//@EnableDiscoveryClient eureka开启发现服务功能
@EnableFeignClients(basePackages = "com.gh.consumer.feign")
//@ComponentScan(basePackages = "com.gh.consumer.*")
@ComponentScans(value = {
@ComponentScan(value = "com.gh.consumer.*")
,@ComponentScan(value = "com.gh.redis.*")
})
@EnableScheduling // 开启定时任务功能
@SpringBootApplication
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
5.再次测试

成功调用redis-utils工具包方法!
以上就是《如何自定义redis工具jar包供其他SpringBoot项目直接使用》的详细内容,更多关于redis的资料请关注golang学习网公众号!
通俗易懂的Redis数据结构基础教程(入门)
- 上一篇
- 通俗易懂的Redis数据结构基础教程(入门)
- 下一篇
- 使用SpringBoot集成redis的方法
-
- 数据库 · Redis | 5小时前 |
- 监控Redis集群健康状态的工具与指标
- 112浏览 收藏
-
- 数据库 · Redis | 1星期前 |
- Redis数据安全防护全攻略
- 252浏览 收藏
-
- 数据库 · Redis | 2星期前 |
- Redis主从复制故障排查与修复技巧
- 302浏览 收藏
-
- 数据库 · Redis | 2星期前 |
- Redis与HBase存储方案详解
- 325浏览 收藏
-
- 数据库 · Redis | 2星期前 |
- Redis数据安全防护全攻略
- 157浏览 收藏
-
- 数据库 · Redis | 2星期前 |
- 高并发Redis优化技巧分享
- 257浏览 收藏
-
- 数据库 · Redis | 2星期前 |
- Redis数据安全防护全攻略
- 398浏览 收藏
-
- 数据库 · Redis | 3星期前 |
- Redis配置加密方法与安全设置
- 232浏览 收藏
-
- 数据库 · Redis | 3星期前 |
- RedisHyperLogLog高效统计技巧
- 283浏览 收藏
-
- 数据库 · Redis | 3星期前 |
- Redis与MySQL缓存同步方法详解
- 141浏览 收藏
-
- 数据库 · Redis | 3星期前 |
- Redis布隆过滤器防穿透原理解析
- 312浏览 收藏
-
- 数据库 · Redis | 1个月前 |
- Redis容器化部署实战技巧分享
- 195浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- ChatExcel酷表
- ChatExcel酷表是由北京大学团队打造的Excel聊天机器人,用自然语言操控表格,简化数据处理,告别繁琐操作,提升工作效率!适用于学生、上班族及政府人员。
- 3162次使用
-
- Any绘本
- 探索Any绘本(anypicturebook.com/zh),一款开源免费的AI绘本创作工具,基于Google Gemini与Flux AI模型,让您轻松创作个性化绘本。适用于家庭、教育、创作等多种场景,零门槛,高自由度,技术透明,本地可控。
- 3375次使用
-
- 可赞AI
- 可赞AI,AI驱动的办公可视化智能工具,助您轻松实现文本与可视化元素高效转化。无论是智能文档生成、多格式文本解析,还是一键生成专业图表、脑图、知识卡片,可赞AI都能让信息处理更清晰高效。覆盖数据汇报、会议纪要、内容营销等全场景,大幅提升办公效率,降低专业门槛,是您提升工作效率的得力助手。
- 3403次使用
-
- 星月写作
- 星月写作是国内首款聚焦中文网络小说创作的AI辅助工具,解决网文作者从构思到变现的全流程痛点。AI扫榜、专属模板、全链路适配,助力新人快速上手,资深作者效率倍增。
- 4506次使用
-
- MagicLight
- MagicLight.ai是全球首款叙事驱动型AI动画视频创作平台,专注于解决从故事想法到完整动画的全流程痛点。它通过自研AI模型,保障角色、风格、场景高度一致性,让零动画经验者也能高效产出专业级叙事内容。广泛适用于独立创作者、动画工作室、教育机构及企业营销,助您轻松实现创意落地与商业化。
- 3784次使用
-
- springboot+mysql实现登录次数限制
- 2023-01-19 281浏览
-
- 为什么java用zookeeper做服务发现,golang用consul做服务发现,是因为语言生态问题吗?
- 2023-02-23 236浏览
-
- SSM结合easyexcel导入数据库
- 2023-02-16 278浏览
-
- HashMap的实现原理(看这篇就够了)
- 2023-01-19 443浏览
-
- 重复提交导致插入数据库时跳过了验证,如果解决?
- 2023-01-08 450浏览

