监听Redis缓存key过期

前言

有些业务需要延迟一定时间后执行,比如订单提交后15分钟未支付就自动关闭,这里只是举个例子。我们可以通过监听redis的key过期事件来实现这个功能。

一、添加依赖

添加redis依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

二、配置

配置消息监听容器,把redis连接工厂放进去

@Configuration
public class RedisListenerConfig {

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

}

三、监听

继承org.springframework.data.redis.listener.KeyExpirationEventMessageListener类,监听过期事件。注意message里的是失效的key,拿不到value。

@Slf4j
@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {


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

    /**
     * 针对 redis 数据失效事件,进行数据处理
     * @param message key
     * @param pattern pattern
     */
    @Override
    public void onMessage(Message message, byte[] pattern) {

        // 获取到失效的 key
        String expiredKey = message.toString();
        log.info("拿到过期的数据:{}", expiredKey);
        super.onMessage(message, pattern);
    }

}
@Component
public class TimeTaskTest {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    public void add(){
        redisTemplate.opsForValue().set("key", "value", 30, TimeUnit.SECONDS);
    }

}

猜你喜欢

转载自blog.csdn.net/WayneLee0809/article/details/113978427