日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

springboot監聽Redis 緩存過期(Key 失效)事件

作者:瞎搞一通 更新時間: 2023-07-06 編程語言

1、Redis配置修改

事件通過 Redis 的訂閱與發布功能(pub/sub)來進行分發, 故需要開啟 redis 的事件監聽與發布
修改 redis.conf 文件(Windows上是redis.windows.conf和redis.windows-service.conf)

notify-keyspace-events Ex

2、 redis的配置類開啟 redis過期監聽


    /**
     * 開啟 redis過期監聽
     * @param connectionFactory
     * @return
     */
    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        return container;
    }

3、定義 key過期監聽器,繼承 KeyExpirationEventMessageListener

@Slf4j
@Component
public class RedisListener extends KeyExpirationEventMessageListener {

    public RedisListener(RedisMessageListenerContainer listenerContainer) {
        super(listenerContainer);
    }

    /**
     * 針對redis緩存數據失效事件,進行后續數據處理
     *
     * @param message
     * @param pattern
     */
    @Override
    public void onMessage(Message message, byte[] pattern) {
        /** key ,會把key返回,而不會將value返回*/
        String expiredKey = message.toString();
        log.info("過期緩存key:" + expiredKey);
        try {
            //登陸信息過期 若expiredKey以login開始則打印log
            if (expiredKey.startsWith("login")){
                log.info("---------redis 過期緩存處理");
            }

        } catch (Exception e) {
            log.info("---------redis 過期緩存處理 異常---------");
            e.printStackTrace();
        }

    }

}

通過開啟key過期的事件通知,當key過期時,會發布過期事件;我們定義key過期事件的監聽器,當key過期時,就能收到回調通知。
注意:
  1)由于Redis key過期刪除是定時+惰性,當key過多時,刪除會有延遲,回調通知同樣會有延遲。
  2)回調通知是一次性的,沒有ack機制,若收到通知后處理失敗,將不再收到通知。
  3)回調通知只能拿到key,拿不到value。

使用場景:
  1)可以實現延時隊列
    消息作為key,將需要延遲的時間設置為key的TTL,當key過期時,在監聽器收到通知,達到延遲的效果。

原文鏈接:https://blog.csdn.net/god_sword_/article/details/131508245

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新