美文网首页
spring boot + redis 过期事件

spring boot + redis 过期事件

作者: Lasipia | 来源:发表于2020-01-20 14:39 被阅读0次
    1. 修改redis.conf
    # 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”意味着所有的事件
    

    notify-keyspace-events Ex

    2.添加RedisMessageListenerContainer 配置

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

    3.添加KeyExpirationEventMessageListener配置

    @Bean
    public KeyExpirationEventMessageListener keyExpirationEventMessageListener(RedisMessageListenerContainer container) {
        return new KeyExpirationEventMessageListener(container);
    }
    

    KeyExpirationEventMessageListener内部会自动的订阅 __keyevent@*__:expired 这个Topic

    4.添加一个事件监听

    @Component
    @Slf4j
    public class RedisKeyExpireListener implements ApplicationListener<RedisKeyExpiredEvent> {
        @Override
        public void onApplicationEvent(RedisKeyExpiredEvent event) {
            log.debug("{}:{}:{}:{}",event.getId(),event.getKeyspace(),event.getValue(),event.getChannel());
        }
    }
    

    使用spring来实现可以过期事件监听非常方便,只需要简单的几个Bean的配置就可以了,spring会把redis的过期事件转化为spring的应用事件,我们只需要配一个监听器来监听RedisKeyExpiredEvent事件就可以了

    相关文章

      网友评论

          本文标题:spring boot + redis 过期事件

          本文链接:https://www.haomeiwen.com/subject/mhujzctx.html