- 在springboot項目中配置監聽redis的失效key:
- 注入redis消息監聽容器
/**
* Redis 消息監聽器容器.
* [@param] redisConnectionFactory
* [@return]
*/
[@Bean](https://my.oschina.net/bean)
public RedisMessageListenerContainer redisMessageListenerContainer(RedisConnectionFactory redisConnectionFactory) {
RedisMessageListenerContainer redisMessageListenerContainer = new RedisMessageListenerContainer();
redisMessageListenerContainer.setConnectionFactory(redisConnectionFactory);
return redisMessageListenerContainer;
}
- Redis Key失效監聽器註冊爲Bean.
/**
* Redis Key失效監聽器註冊爲Bean.
*
* [@param] redisMessageListenerContainer the redis message listener container
* [@return] the redis event message listener
*/
@Bean
public RedisEventMessageListener redisEventMessageListener(RedisMessageListenerContainer redisMessageListenerContainer){
return new RedisEventMessageListener(redisMessageListenerContainer);
}
- 失效的監聽類
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import java.time.LocalDateTime;
/**
* @ClassName: RedisEventMessageListener
* @Description: TODO
* @Author: $
* @Date: 2022/4/19 18:07
**/
@Slf4j
public class RedisEventMessageListener extends KeyExpirationEventMessageListener {
/**
* Creates new {@link MessageListener} for
* {@code __keyevent@*__:expired} messages.
*
* @param listenerContainer must not be {@literal null}.
*/
public RedisEventMessageListener(RedisMessageListenerContainer listenerContainer) {
super(listenerContainer);
}
@Override
protected void doHandleMessage(Message message) {
// 這個就是過期的key ,過期後,也就是事件觸發後對應的value是拿不到的。
// 這裏實現業務邏輯,如果是服務器集羣的話需要使用分佈式鎖進行搶佔執行。
String key = message.toString();
System.out.println("key = " + key);
System.out.println("end = " + LocalDateTime.now());
}
}