【Redis】redis中的key失效後執行java方法

redis的超時監聽,只需修改配置文件redis.conf中的:notify-keyspace-events Ex

K    鍵空間通知,以__keyspace@<db>__爲前綴  
E    鍵事件通知,以__keysevent@<db>__爲前綴  
g    del , expipre , rename 等類型無關的通用命令的通知, ...  
$    String命令  
l    List命令  
s    Set命令  
h    Hash命令  
z    有序集合命令  
x    過期事件(每次key過期時生成)  
e    驅逐事件(當key在內存滿了被清除時生成)  
A    g$lshzxe的別名,因此”AKE”意味着所有的事件  

新建一個配置類

@Configuration
public class RedisListenerConfig {

    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory){
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        return container;
    }
}

再新建一個監聽器

@Slf4j
@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {

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

    @Override
    public void onMessage(Message message, byte[] pattern) {
        String expKey = message.toString();
        String date = new DateTime().toString("yyyy-MM-dd HH:mm:ss");
        log.info("{}---該key(訂單號):{} 失效了~", date, expKey);
        log.info("業務代碼執行結束...");
    }
}

 

測試代碼

    @RequestMapping(value = "/addOrder", method = RequestMethod.GET)
    public String addOrder(){
        String orderId = UUID.randomUUID().toString().replace("-", "");
        String date = new DateTime().toString("yyyy-MM-dd--HH:mm:ss");
        redisUtils.set(orderId, date, 10);
        return "在"+date+"下單成功,訂單號:"+orderId;
    }

測試

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