之前我使用过使用Redisson这种Redis的框架实现过延时发送。今天突然好奇,在SpringBoot中,Redis能监听到Key失效事件吗?经过查资料,答案是肯定的,可以监听Key失效,但是有缺陷,监听事件里面只能拿到Key,不能拿到这个Key对应的Value。所以说,在生成这个Key的时候,需要把这个Key对应的Value存放到数据库中,以便在失效事件中再去查询一下数据库。

        Redis的Key失效事件在SpringBoot中可以做一些订阅功能,比如延时发送邮件等。

        配置的话像下面一样就好了。

@Configuration
public class RedisConfig  ....
 
    @Bean
    public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {

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

        消费端

@Component
public class RedisExpiredListener extends KeyExpirationEventMessageListener ...

    private static final String ORDER_PREFIX = "Order:";

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

    @Override
    public void onMessage(Message message, byte[] pattern) {
        //获取失效的key
        String expiredKey = message.toString();

        if (expiredKey.startsWith(ORDER_PREFIX)) {
            //如果是Order:开头的key,消费Key
            LOGGER.info("消费Key:{}", message);
            //someService.findDataByKey(key);
            //do something ...
        }
    }
}

你看我都这么努力的分享知识给你了,鼓励一下又何妨O(∩_∩)O

大宇期待与你们共同进步!同时也非常感谢最近兄弟们的支持!

                

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐