SpringBoot 使用redis的key 過期通知

1 redis默認key過期通知是關閉的,原因是多少會對cpu性能有影響,要使用redis的key過期通知功能,就的改配置:

 config set notify-keyspace-events Ex

人後重啓redis生效。

2 添加redis的配置


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;

/**
 * @author :zoboy
 * @Description:
 * @ Date: Created in 2020-05-18 11:00
 */
@Configuration
public class RedisListenerConfig {
    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {

        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        return container;
    }
}

3  寫一個監聽類




import com.alibaba.fastjson.JSON;
import com.cictec.network.bus.base.order.service.IOrderService;
import com.cictec.network.bus.busi.sys.model.entity.Order;
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 org.springframework.stereotype.Component;

import javax.annotation.Resource;


/**
 * @author :zoboy
 * @Description:
 * @ Date: Created in 2020-05-18 10:58
 */
@Slf4j
@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
    @Resource
    private IOrderService orderService;

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

    /**
     * redis key失效,監聽
     * message.toString()可以獲取失效的key
     * message.getBody 獲取key對應的內容
     * @param message
     * @param pattern
     */
    @Override
    public void onMessage(Message message, byte[] pattern) {
        String expiredKey = message.toString();
        log.info(expiredKey + "----動作觸發,開始執行");
        try {
           //業務處理
        } catch (Exception e) {
            log.error("key 過期通知處理異常,{}", e);
        }

    }
}

4 測試

往redis加一條數據

然後默認5秒過期,5秒後:

至此springboot使用redis的主鍵過期通知完畢!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章