springboot監聽失效redis的key

- 在springboot項目中配置監聽redis的失效key:

  1. 注入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;
    }
  1. 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);
    }
  1. 失效的監聽類
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());
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章