From cd68e6166afefc92c013639ad9d3ed2c559cd3b9 Mon Sep 17 00:00:00 2001 From: "a15234804788@163.com" Date: Sun, 9 Oct 2022 17:10:54 +0800 Subject: [PATCH] Changes --- .../user/controller/TrainController.java | 18 +++++++++ .../user/service/impl/TrainServiceImpl.java | 14 ++----- .../user/util/RedisKeyExpirationListener.java | 37 +++++++++++++++++++ .../system/user/util/RedisListenerConfig.java | 21 +++++++++++ .../system/user/util/ThreadPoolFactory.java | 2 +- 5 files changed, 81 insertions(+), 11 deletions(-) create mode 100644 lab-service/lab-user/src/main/java/org/springblade/system/user/util/RedisKeyExpirationListener.java create mode 100644 lab-service/lab-user/src/main/java/org/springblade/system/user/util/RedisListenerConfig.java diff --git a/lab-service/lab-user/src/main/java/org/springblade/system/user/controller/TrainController.java b/lab-service/lab-user/src/main/java/org/springblade/system/user/controller/TrainController.java index d649bc6..4a7c5a9 100644 --- a/lab-service/lab-user/src/main/java/org/springblade/system/user/controller/TrainController.java +++ b/lab-service/lab-user/src/main/java/org/springblade/system/user/controller/TrainController.java @@ -25,6 +25,8 @@ import org.springblade.system.user.service.ITrainService; import org.springblade.system.user.service.ITrainSpeakService; import org.springblade.system.user.util.ThreadPoolFactory; import org.springblade.system.user.vo.TrainVO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.web.bind.annotation.*; import javax.annotation.PostConstruct; @@ -209,4 +211,20 @@ public class TrainController extends BladeController { } },time1 - now, TimeUnit.MILLISECONDS); } + + @Autowired + private StringRedisTemplate redisTemplate; + + /** + * 测试方法,向redis中添加具有过期时间的key, + * 这里添加的培训任务的id + * @return + */ + @GetMapping("testSaveRedis") + public R testSaveRedis(){ + redisTemplate.opsForValue().set("1578954759149441026", "1578954759149441026", 10, TimeUnit.SECONDS); + return R.success("ok"); + } + + } diff --git a/lab-service/lab-user/src/main/java/org/springblade/system/user/service/impl/TrainServiceImpl.java b/lab-service/lab-user/src/main/java/org/springblade/system/user/service/impl/TrainServiceImpl.java index f6b4c29..e3dcca1 100644 --- a/lab-service/lab-user/src/main/java/org/springblade/system/user/service/impl/TrainServiceImpl.java +++ b/lab-service/lab-user/src/main/java/org/springblade/system/user/service/impl/TrainServiceImpl.java @@ -18,6 +18,8 @@ import org.springblade.system.user.service.ITrainPersonService; import org.springblade.system.user.service.ITrainService; import org.springblade.system.user.service.ITrainSpeakService; import org.springblade.system.user.util.ThreadPoolFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -53,16 +55,8 @@ public class TrainServiceImpl extends BaseServiceImpl implem private final ISysClient sysClient; -// private ScheduledExecutorService executorService = Executors.newScheduledThreadPool(100); -// -// @PostConstruct -// public void init() { -// ScheduledExecutorService executorService; -// //cpu核心数 -// int i = Runtime.getRuntime().availableProcessors(); -// //创建执行定时任务的线程池 -// executorService = Executors.newScheduledThreadPool(i == 0 ? 10 : i * 8); -// } + @Autowired + private StringRedisTemplate redisTemplate; @Override @Transactional(rollbackFor = Exception.class) diff --git a/lab-service/lab-user/src/main/java/org/springblade/system/user/util/RedisKeyExpirationListener.java b/lab-service/lab-user/src/main/java/org/springblade/system/user/util/RedisKeyExpirationListener.java new file mode 100644 index 0000000..8858072 --- /dev/null +++ b/lab-service/lab-user/src/main/java/org/springblade/system/user/util/RedisKeyExpirationListener.java @@ -0,0 +1,37 @@ +package org.springblade.system.user.util; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.springblade.system.user.entity.Train; +import org.springblade.system.user.service.ITrainService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.connection.Message; +import org.springframework.data.redis.listener.KeyExpirationEventMessageListener; +import org.springframework.data.redis.listener.RedisMessageListenerContainer; +import org.springframework.stereotype.Component; + +/** + * redis监听器,监听key过期事件并处理 + * @author ytl + * @since 2022-10-09 16:49 + */ +@Component +public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener { + @Autowired + private ITrainService trainService; + + public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) { + super(listenerContainer); + } + + @Override + public void onMessage(Message message, byte[] pattern) { + // 获取到失效的 key,进行取消订单业务处理 + String expiredKey = message.toString(); + System.out.println("缓存过期的key为:" + expiredKey); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(Train::getId,expiredKey); + Train train = trainService.getOne(queryWrapper); + System.out.println(train.getName()); + //这里可以根据培训的id查询到培训的具体信息,然后再实现通知功能 + } +} diff --git a/lab-service/lab-user/src/main/java/org/springblade/system/user/util/RedisListenerConfig.java b/lab-service/lab-user/src/main/java/org/springblade/system/user/util/RedisListenerConfig.java new file mode 100644 index 0000000..f2bc532 --- /dev/null +++ b/lab-service/lab-user/src/main/java/org/springblade/system/user/util/RedisListenerConfig.java @@ -0,0 +1,21 @@ +package org.springblade.system.user.util; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.listener.RedisMessageListenerContainer; + +/** + * 配置实现监听 Redis key 过期时间 + * @author ytl + * @since 2022-10-09 16:47 + */ +@Configuration +public class RedisListenerConfig { + @Bean + RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory){ + RedisMessageListenerContainer container =new RedisMessageListenerContainer(); + container.setConnectionFactory(connectionFactory); + return container; + } +} diff --git a/lab-service/lab-user/src/main/java/org/springblade/system/user/util/ThreadPoolFactory.java b/lab-service/lab-user/src/main/java/org/springblade/system/user/util/ThreadPoolFactory.java index 66ced42..ab9433f 100644 --- a/lab-service/lab-user/src/main/java/org/springblade/system/user/util/ThreadPoolFactory.java +++ b/lab-service/lab-user/src/main/java/org/springblade/system/user/util/ThreadPoolFactory.java @@ -15,6 +15,6 @@ public class ThreadPoolFactory { /**`` ``* 静态方法`` ``*/ static { - sheduleThreadPool = new ScheduledThreadPoolExecutor(cpuNums * 20); + sheduleThreadPool = new ScheduledThreadPoolExecutor(cpuNums * 10); } }