如何自定义redis工具jar包供其他SpringBoot项目直接使用
注:(最终redis数据库连接信息由使用者项目模块配置提供)
一、Redis常用存储操作实现(redis-util模块,该module最后会打包成jar供其他服务使用)
1.引用相关依赖
org.springframework.boot spring-boot-starter-data-redis 2.3.0.RELEASE
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格式
importorg.springframework.boot.autoconfigure.EnableAutoConfiguration;
importorg.springframework.context.annotation.Bean;
importorg.springframework.context.annotation.Configuration;
importorg.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
importorg.springframework.data.redis.core.RedisTemplate;
importorg.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
importorg.springframework.data.redis.serializer.StringRedisSerializer;
importjava.io.Serializable;
@Configuration
@EnableAutoConfiguration
publicclassRedisConfig{
@Bean
publicRedisTemplateredisTemplate(LettuceConnectionFactoryredisConnectionFactory){
RedisTemplatetemplate=newRedisTemplate();
template.setKeySerializer(newStringRedisSerializer());
template.setValueSerializer(newGenericJackson2JsonRedisSerializer());
template.setHashKeySerializer(newStringRedisSerializer());
template.setHashValueSerializer(newGenericJackson2JsonRedisSerializer());
template.setConnectionFactory(redisConnectionFactory);
returntemplate;
}
}
4.开发相应的redis常用方法
packagecom.gh.redis.util;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.data.redis.core.RedisTemplate;
importorg.springframework.stereotype.Repository;
importorg.springframework.util.CollectionUtils;
importjava.io.Serializable;
importjava.util.ArrayList;
importjava.util.List;
importjava.util.Set;
importjava.util.concurrent.TimeUnit;
@Repository
publicclassRedisUtil{
@Autowired
RedisTemplateredisTemplate;//key-value是对象的
publicRedisUtil(){
}
/**
*判断是否存在key
*@paramkey主键
*@returntrue或false
*/
publicbooleanhasKey(Stringkey){
returnBoolean.TRUE.equals(redisTemplate.hasKey(key));
}
/**
*新增、修改Redis键值
*@paramkey主键
*@paramvalue值
*/
publicvoidinsertOrUpdate(Stringkey,Serializablevalue){
redisTemplate.opsForValue().set(key,value);
}
/**
*新增、修改Redis键值,并设置有效时间(秒)
*@paramkey主键
*@paramvalue值
*@paramseconds有效时间(秒)
*/
publicvoidinsertOrUpdateBySeconds(Stringkey,Serializablevalue,longseconds){
redisTemplate.opsForValue().set(key,value,seconds,TimeUnit.SECONDS);
}
/**
*新增、修改Redis键值,并设置有效时间(分)
*@paramkey主键
*@paramvalue值
*@paramminutes有效时间(分)
*/
publicvoidinsertOrUpdateByMinutes(Stringkey,Serializablevalue,longminutes){
redisTemplate.opsForValue().set(key,value,minutes,TimeUnit.MINUTES);
}
/**
*新增、修改Redis键值,并设置有效时间(小时)
*@paramkey主键
*@paramvalue值
*@paramhours有效时间(小时)
*/
publicvoidinsertOrUpdateByHours(Stringkey,Serializablevalue,longhours){
this.redisTemplate.opsForValue().set(key,value,hours,TimeUnit.HOURS);
}
/**
*新增、修改Redis键值,并设置有效时间(天)
*@paramkey主键
*@paramvalue值
*@paramdays有效时间(天)
*/
publicvoidinsertOrUpdateByDays(Stringkey,Serializablevalue,longdays){
this.redisTemplate.opsForValue().set(key,value,days,TimeUnit.DAYS);
}
/**
*通过主键获取值
*@paramkey主键
*@return
*/
publicObjectget(Stringkey){
returnredisTemplate.opsForValue().get(key);
}
/**
*获取redis的所有key里包含pattern字符的key集
*@parampattern模糊查询字符
*@return
*/
publicSetgetPattern(Stringpattern){
returnredisTemplate.keys("*"+pattern+"*");
}
/**
*删除指定redis缓存
*@paramkey主键
*@return
*/
publicbooleanremove(Stringkey){
returnBoolean.TRUE.equals(redisTemplate.delete(key));
}
/**
*删除指定的多个缓存
*@paramkeys主键1,主键2,...
*@return删除主键数
*/
publicintremoves(String...keys){
intcount=0;
ListdeleteFails=newArrayList<>();
for(Stringkey:keys){
if(Boolean.TRUE.equals(redisTemplate.delete(key))){
++count;
}else{
deleteFails.add(key);
}
}
if(!CollectionUtils.isEmpty(deleteFails)){
System.err.println("======>Redis缓存删除失败的key:"+deleteFails.toString());
}
returncount;
}
/**
*删除所有的键值对数据
*@return清除键值对数据量
*/
publicintremoveAll(){
Setkeys=redisTemplate.keys("*");
Longdelete=0L;
if(keys!=null){
delete=redisTemplate.delete(keys);
}
returndelete!=null?delete.intValue():0;
}
}
5.工具包开发完成,测试一下
importcom.gh.common.toolsclass.ResultData;
importcom.gh.redis.util.RedisUtil;
importorg.junit.jupiter.api.Test;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.boot.test.context.SpringBootTest;
importjava.util.Set;
@SpringBootTest
classRedisApplicationTests{
@Autowired
privateRedisUtilredisUtil;
@Test
voidtest1(){
ResultDataresultData=newResultData();
resultData.setCode(0);
resultData.setMessage("redis测试");
resultData.setData("666666");
redisUtil.insertOrUpdate("demo",resultData);
System.err.println(redisUtil.hasKey("demo"));
Objectdemo=redisUtil.get("demo");
ResultDatabo=(ResultData)demo;
System.err.println(bo.toString());
}
@Test
voidtest2(){
Setlist=redisUtil.getPattern("l");
for(Strings:list){
System.err.println(s);
}
}
}
其中ResultData是自定义的一个用于返回信息的对象,可用其他对象替代,但是该对象需要实现Serializable接口(ResultDataimplementsSerializable)
运行test1:
运行test2:
其他方法自行测试,这里不一一展示;
6.清除redis数据库连接信息
自此redis-util工具包开发完成,可供其他服务使用,最后清除redis-util模块application.properties里的redis数据库连接信息。之后的连接信息由使用者模块提供,这样才符合redis-util作为一个纯工具包的定义。
二、创建一个consumer项目来引用redis-util工具包
1.在consumer项目的pom.xml中添加reids-utils的依赖
com.gh redis-util 0.0.1-SNAPSHOT
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工具包的方法
packagecom.gh.consumer;
importcom.gh.common.toolsclass.ResultData;
importcom.gh.redis.util.RedisUtil;
importorg.junit.jupiter.api.Test;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.boot.test.context.SpringBootTest;
@SpringBootTest(webEnvironment=SpringBootTest.WebEnvironment.RANDOM_PORT)
classConsumerApplicationTests{
//这里使用该构造器注入的方式,因为使用变量注入
finalRedisUtilredisUtil;
@Autowired
publicConsumerApplicationTests(RedisUtilredisUtil){
this.redisUtil=redisUtil;
}
@Test
voidtest1(){
//如果存在demo缓存,就删除
if(redisUtil.hasKey("demo")){
System.err.println(redisUtil.remove("demo"));
}
//插入新的demo缓存
ResultDataresultData=newResultData();
resultData.setCode(0);
resultData.setMessage("redis测试-2");
resultData.setData("888888");
redisUtil.insertOrUpdate("demo",resultData);
Objectdemo=redisUtil.get("demo");
ResultDatabo=(ResultData)demo;
System.err.println(bo.toString());
}
@Test
voidtest2(){
redisUtil.insertOrUpdate("test","redis工具测试");
System.err.println(redisUtil.get("test"));
}
}
运行test1,此时会发现控制台提示找不到RedisUtil的bean
4.在启动类添加扫描
其他注解不用管,解决redis-util工具包bean扫描不到的问题,只需要添加注解@ComponentScan(value=“com.gh.redis.*”)就好
packagecom.gh.consumer;
importorg.springframework.boot.SpringApplication;
importorg.springframework.boot.autoconfigure.SpringBootApplication;
//importorg.springframework.cloud.client.discovery.EnableDiscoveryClient;
importorg.springframework.cloud.openfeign.EnableFeignClients;
importorg.springframework.context.annotation.ComponentScan;
importorg.springframework.context.annotation.ComponentScans;
importorg.springframework.scheduling.annotation.EnableScheduling;
//@EnableDiscoveryClienteureka开启发现服务功能
@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
publicclassConsumerApplication{
publicstaticvoidmain(String[]args){
SpringApplication.run(ConsumerApplication.class,args);
}
}
5.再次测试
成功调用redis-utils工具包方法!
到此这篇关于如何自定义redis工具jar包供其他SpringBoot项目直接使用的文章就介绍到这了,更多相关redis工具jar包springboot使用内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。