Redis超时监听设置指定数据库

1.根据配置的超时监听配置查看继承的监听器

public class RedisExpireListener extends KeyExpirationEventMessageListener {

    private static final Logger LOG = LoggerFactory.getLogger(RedisExpireListener.class);

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

    @Override
    public void onMessage(Message message, byte[] pattern) {
        //过期的key
        String key = new String(message.getBody(), StandardCharsets.UTF_8);
            // 监听到key过期,对key进行后续处理
        LOG.info("监听到redis-key-{}过期",key);

        }
}

2.进入KeyExpirationEventMessageListener查看相关源码

public class KeyExpirationEventMessageListener extends KeyspaceEventMessageListener implements ApplicationEventPublisherAware {
    private static final Topic KEYEVENT_EXPIRED_TOPIC = new PatternTopic("__keyevent@*__:expired");
    @Nullable
    private ApplicationEventPublisher publisher;

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

    protected void doRegister(RedisMessageListenerContainer listenerContainer) {
        listenerContainer.addMessageListener(this, KEYEVENT_EXPIRED_TOPIC);
    }

    protected void doHandleMessage(Message message) {
        this.publishEvent(new RedisKeyExpiredEvent(message.getBody()));
    }

    protected void publishEvent(RedisKeyExpiredEvent event) {
        if (this.publisher != null) {
            this.publisher.publishEvent(event);
        }

    }

    public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
        this.publisher = applicationEventPublisher;
    }
}

发现默认配置为"__keyevent@*__:expired"

3.可以重写doRegister方法设置指定监听的的数据库

public class RedisExpireListener extends KeyExpirationEventMessageListener {

    private static final Logger LOG = LoggerFactory.getLogger(RedisExpireListener.class);

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

    @Override
    protected void doRegister(RedisMessageListenerContainer listenerContainer) {
        Topic KEYEVENT_EXPIRED_TOPIC = new PatternTopic("__keyevent@"+ config.getRedisDb() +"__:expired");
        listenerContainer.addMessageListener(this, KEYEVENT_EXPIRED_TOPIC);
    }

    @Override
    public void onMessage(Message message, byte[] pattern) {
        //过期的key
        String key = new String(message.getBody(), StandardCharsets.UTF_8);
            // 监听到key过期,对key进行后续处理
        LOG.info("监听到redis-key-{}过期",key);

        }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值