修改redis.config
notify-keyspace-events Ex
设置redis相关配置
@ConditionOnRedisCache
@Configuration(proxyBeanMethods = false)
public class RedisConfigure {
@Bean
@ConditionalOnClass(RedisOperations.class)
public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
RedisTemplate template = new RedisTemplate<>();
template.setConnectionFactory(factory);
Jackson2JsonRedisSerializer
redis监听器
@Slf4j
public class MonitorRedisOverdue implements MessageListener {
private RedisService redisService;
priavet static final String set_nx = "set_nx";
private void initBean() {
redisService = AppContextHolder
.getBean(RedisService.class);
}
@Override
public void onMessage(Message message, byte[] pattern) {
try {
//解决Bean注入失败问题
initBean();
//获取的key
Boolean aBoolean = false;
String expiredKey = message.toString()
if(!key.contains(set_nx)){
aBoolean = redisService.setIfAbsent(set_nx.concat(expiredKey), String.valueOf(System.currentTimeMillis()), 30, TimeUnit.SECONDS);
}
if(aBoolean){
//业务操作。。。
}
} catch (Exception e) {
log.error("监听redis过期key出现异常!,{}", e.getMessage());
}
}
}
解决在监听器中,不能使用@Autowired(在class上加入@Service也不可以)
@Component
public class AppContextHolder implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
AppContextHolder.applicationContext = applicationContext;
}
public static T getBean(Class clazz) {
return applicationContext.getBean(clazz);
}
}



