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

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

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

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

1、Redis配置修改

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

notify-keyspace-events Ex

2、 redis的配置類開啟 redis過期監(jiān)聽


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

3、定義 key過期監(jiān)聽器,繼承 KeyExpirationEventMessageListener

@Slf4j
@Component
public class RedisListener extends KeyExpirationEventMessageListener {

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

    /**
     * 針對redis緩存數(shù)據(jù)失效事件,進(jìn)行后續(xù)數(shù)據(jù)處理
     *
     * @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過期的事件通知,當(dāng)key過期時(shí),會發(fā)布過期事件;我們定義key過期事件的監(jiān)聽器,當(dāng)key過期時(shí),就能收到回調(diào)通知。
注意:
  1)由于Redis key過期刪除是定時(shí)+惰性,當(dāng)key過多時(shí),刪除會有延遲,回調(diào)通知同樣會有延遲。
  2)回調(diào)通知是一次性的,沒有ack機(jī)制,若收到通知后處理失敗,將不再收到通知。
  3)回調(diào)通知只能拿到key,拿不到value。

使用場景:
  1)可以實(shí)現(xiàn)延時(shí)隊(duì)列
    消息作為key,將需要延遲的時(shí)間設(shè)置為key的TTL,當(dāng)key過期時(shí),在監(jiān)聽器收到通知,達(dá)到延遲的效果。

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

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