创建监听类KeyExpiredListener 继承 KeyExpirationEventMessageListener
@Slf4j
public class KeyExpiredListener extends KeyExpirationEventMessageListener {
public KeyExpiredListener(RedisMessageListenerContainer listenerContainer) {
super(listenerContainer);
}
@Override
public void onMessage(Message message, byte[] pattern) {
String channel = new String(message.getChannel(), StandardCharsets.UTF_8);
//过期的key
String key = new String(message.getBody(),StandardCharsets.UTF_8);
log.info("redis key 过期:pattern={},channel={},key={}",new String(pattern),channel,key);
}
}
配置类
@Configuration
public class RedisConfig {
@Autowired
private RedisConnectionFactory connectionFactory;
@Autowired
private MessageListenerAdapter listenerAdapter;
@Bean
RedisMessageListenerContainer container(
) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
// 可以添加多个 messageListener,配置不同的交换机
container.addMessageListener(listenerAdapter, new PatternTopic("channel:test"));
container.addMessageListener(listenerAdapter,new PatternTopic("nnnn"));
return container;
}
/**
* 消息监听器适配器,绑定消息处理器,利用反射技术调用消息处理器的业务方法
* @param receiver
* @return
*/
@Bean
MessageListenerAdapter listenerAdapter(Msg receiver) {
System.out.println("消息适配器1");
return new MessageListenerAdapter(receiver, "receiveMessage");
}
@Bean
public KeyExpiredListener keyExpiredListener() {
return new KeyExpiredListener(this.container());
}
}