dev
a15234804788@163.com 3 years ago
parent e55d98a36b
commit cd68e6166a
  1. 18
      lab-service/lab-user/src/main/java/org/springblade/system/user/controller/TrainController.java
  2. 14
      lab-service/lab-user/src/main/java/org/springblade/system/user/service/impl/TrainServiceImpl.java
  3. 37
      lab-service/lab-user/src/main/java/org/springblade/system/user/util/RedisKeyExpirationListener.java
  4. 21
      lab-service/lab-user/src/main/java/org/springblade/system/user/util/RedisListenerConfig.java
  5. 2
      lab-service/lab-user/src/main/java/org/springblade/system/user/util/ThreadPoolFactory.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");
}
}

@ -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<TrainMapper, Train> 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)

@ -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<Train> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Train::getId,expiredKey);
Train train = trainService.getOne(queryWrapper);
System.out.println(train.getName());
//这里可以根据培训的id查询到培训的具体信息,然后再实现通知功能
}
}

@ -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;
}
}

@ -15,6 +15,6 @@ public class ThreadPoolFactory {
/**`` ``* 静态方法`` ``*/
static
{
sheduleThreadPool = new ScheduledThreadPoolExecutor(cpuNums * 20);
sheduleThreadPool = new ScheduledThreadPoolExecutor(cpuNums * 10);
}
}

Loading…
Cancel
Save