10. Springboot整合Redis事件监听实现定时功能
最近新写了个定时的任务,就是前端用户设置一个时间,然后时间到了来触发调用这个程序,想了很多办法,后来就用到了redis监听来实现这一功能。
废话不多,直接上代码实例:
如果有不会在项目中用redis的小伙伴可以看上一篇文章。
/*redis监听过期时间设置*/
@Configuration
public class RedisConfiguration {
@Autowired
private RedisConnectionFactory redisConnectionFactory;
@Bean
public RedisMessageListenerContainer redisMessageListenerContainer() {
RedisMessageListenerContainer redisMessageListenerContainer = new RedisMessageListenerContainer();
redisMessageListenerContainer.setConnectionFactory(redisConnectionFactory);
return redisMessageListenerContainer;
}
@Bean
public KeyExpiredListener keyExpiredListener() {
return new KeyExpiredListener(this.redisMessageListenerContainer());
}
}
public KeyExpiredListener(RedisMessageListenerContainer listenerContainer) {
super(listenerContainer);
}
@Override
public void onMessage(Message message, byte[] pattern) {
System.out.println("过期key:" + message.toString());
String inquiryEnquiryNumber = new String(message.getBody());
//key值为CLEAN+设备编号
if(inquiryEnquiryNumber.startsWith("CLEAN")) {
}
}
监听所有失效的key值,然后把它转化为String类型,获取字符串开头是否为CLEAN如果是的话,就可以在里面写方法调用该方法。
实现思路:
实现这个功能就是把用户传入的时间转化为秒存入redis,当这个key失效的时候就说明时间到了然后就触发调用方法程序。
总结:前端传入后台一个时间,后端根据当前时间和传的时间判断之间相差多少秒,然后把这个时间设置为过期时间存入redis,等redis中这个时间到了,就在监听中调用方法,执行相对应的程序。
End
不点关注,我们哪来故事?