继承KeyExpirationEventMessageListener实现redis的key失效监听。
单机模式下:
@Slf4j
@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
@Resource
@Lazy
RedisUtil redisUtil;
public RedisKeyExpirationListener(RedisMessageListenerContainer redisMessageListenerContainer) {
super(redisMessageListenerContainer);
}
/**
* 针对 redis 数据失效事件,进行数据处理
*/
@Override
public void onMessage(Message message, byte[] pattern) {
// 进行业务处理
// 过期的key就是message
}
}
集群模式下:
在集群模式下服务都会收到过期通知,如果不加锁会出现重复消费,使用redis的setNx对过期key进行加锁,保证只有一个服务key进行消费不会重复消费。