如何使用Redis+SpringBoot实现定时任务测试
如何使用Redis+SpringBoot实现定时任务测试
这篇文章主要介绍“如何使用Redis+SpringBoot实现定时任务测试”,在日常操作中,相信很多人在如何使用Redis+SpringBoot实现定时任务测试问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用Redis+SpringBoot实现定时任务测试”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
Redis实现定时任务是基于对RedisKey值的监控
具体代码实现:
建一个SpringBoot项目
引入依赖
<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.4</version><relativePath/><!--lookupparentfromrepository--></parent><groupId>com.example</groupId><artifactId>redistask</artifactId><version>0.0.1-SNAPSHOT</version><name>redistask</name><description>DemoprojectforSpringBoot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
配置文件
spring.redis.host=127.0.0.1spring.redis.port=6379spring.redis.timeout=10000
新建一个配置类
packagecom.zhouhong.redistask.redistaskconfig;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.data.redis.connection.RedisConnectionFactory;importorg.springframework.data.redis.listener.RedisMessageListenerContainer;/***description:Redis配置类*@author:zhouhong*@version:V1.0.0*@date:2021年3月19日上午10:58:24*/@ConfigurationpublicclassRedisTaskConfig{@BeanRedisMessageListenerContainercontainer(RedisConnectionFactoryconnectionFactory){RedisMessageListenerContainercontainer=newRedisMessageListenerContainer();container.setConnectionFactory(connectionFactory);returncontainer;}}
新建Controller,设置不同过期时间的Key值,注意这里key值最好使用当前的业务标识做前缀,不然可能出现key重复的现象。
packagecom.zhouhong.redistask.redistaskcontroller;importjava.util.Date;importjava.util.concurrent.TimeUnit;importorg.apache.logging.log4j.LogManager;importorg.apache.logging.log4j.Logger;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.data.redis.core.RedisTemplate;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestMethod;importorg.springframework.web.bind.annotation.RestController;/***description:测试Redis定时Controller类*@author:zhouhong*@version:V1.0.0*@date:2021年3月19日上午10:59:21*/@RestControllerpublicclassRedisTaskController{@AutowiredprivateRedisTemplate<String,String>template;Loggerlogger=LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);/***设置定时key,这里key最好使用业务前缀,防止名字相同*@return*/@RequestMapping(value="putkeys",method=RequestMethod.POST)publicStringputRedisTaskKeys(){Datedate=newDate();logger.info("业务开始时间:"+date);Stringkey10S="business1"+"|"+"key10S"+"|"+"其他业务中需要使用到的参数";Stringkey20S="business1"+"|"+"key20S"+"|"+"其他业务中需要使用到的参数";template.opsForValue().set(key10S,"values",10,TimeUnit.SECONDS);template.opsForValue().set(key20S,"values",20,TimeUnit.SECONDS);return"RedisKey过期键设置成功";}}
新建Service用来监控过期Key,并且针对不同时间做不同的业务
packagecom.zhouhong.redistask.service;importjava.util.Date;importorg.apache.logging.log4j.LogManager;importorg.apache.logging.log4j.Logger;importorg.springframework.data.redis.connection.Message;importorg.springframework.data.redis.listener.KeyExpirationEventMessageListener;importorg.springframework.data.redis.listener.RedisMessageListenerContainer;importorg.springframework.stereotype.Component;importorg.springframework.stereotype.Service;/***description:RedisKey键监听以及业务逻辑处理*@author:zhouhong*@version:V1.0.0*@date:2021年3月19日上午10:58:52*/@Service@ComponentpublicclassRedisTaskServiceextendsKeyExpirationEventMessageListener{Loggerlogger=LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);/***@paramlistenerContainer*/publicRedisTaskService(RedisMessageListenerContainerlistenerContainer){super(listenerContainer);}@OverridepublicvoidonMessage(Messagemessage,byte[]pattern){StringexpiredKey=message.toString();//将拿到的过期键使用之前拼接时的特殊符号分割成字符数组String[]expiredKeyArr=expiredKey.split("\|");StringbusinessSign=expiredKeyArr[0].toString();StringexpiredTimeSign=expiredKeyArr[1].toString();StringothersParm=expiredKeyArr[2].toString();logger.info(businessSign+expiredTimeSign+othersParm);Datedate=newDate();//只有本业务才执行以下操作if(businessSign.equals("business1")){if(expiredTimeSign.equals("key10S")){//定时十秒钟后业务处理logger.info("十秒钟时的时间:"+date);logger.info("定时任务10秒钟已到,下面处理相关业务逻辑代码!!!");logger.info("10秒钟后的业务逻辑代码,其他业务参数"+othersParm);}elseif(expiredTimeSign.equals("key20S")){//定时十秒钟后业务处理logger.info("二十秒钟时的时间:"+date);logger.info("定时任务20秒钟已到,下面处理相关业务逻辑代码!!!");logger.info("20秒钟后的业务逻辑代码,其他业务参数"+othersParm);}}else{logger.error("非business1业务不做处理");}}}
演示:
定时成功!!
到此,关于“如何使用Redis+SpringBoot实现定时任务测试”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注恰卡编程网网站,小编会继续努力为大家带来更多实用的文章!
推荐阅读
-
vue动态添加删除输入框(springboot vue怎么让数据库显示出来)
springbootvue怎么让数据库显示出来?一般情况下是前端调阅后端接口,来获取到数据库的数据,后端哪里会把数据库的数据整理...
-
php如何让Swoole/Pool进程池实现Redis持久连接
php如何让Swoole/Pool进程池实现Redis持久连接本篇...
-
php操作redis大全记录
php连接redis测试˂?php$redis=newRedis();$redis-˃conne...
-
PHP经典高级工程师面试题
1.PHP如何实现不用自带的cookie函数为客户端下发cookie。对于分布式系统,如何来保存session值...
-
PHP操作Redis数据库
-
php利用redis防止商品超发来限制抢购,简单又实用
-
php如何实现秒杀功能?php+redis模拟简单抢购场景,快来看看吧
-
PHP高级工程师面试题
-
Laravel结合Redis发送邮箱验证码
-
使用redis缓存实现多服务器PHP sessions共享