springboot监听Redis 缓存过期(Key 失效)事件

1 篇文章 0 订阅

1、Redis配置修改

事件通过 Redis 的订阅与发布功能(pub/sub)来进行分发, 故需要开启 redis 的事件监听与发布
修改 redis.conf 文件(Windows上是redis.windows.conf和redis.windows-service.conf)

notify-keyspace-events Ex

2、 redis的配置类开启 redis过期监听


    /**
     * 开启 redis过期监听
     * @param connectionFactory
     * @return
     */
    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        return container;
    }

3、定义 key过期监听器,继承 KeyExpirationEventMessageListener

@Slf4j
@Component
public class RedisListener extends KeyExpirationEventMessageListener {

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

    /**
     * 针对redis缓存数据失效事件,进行后续数据处理
     *
     * @param message
     * @param pattern
     */
    @Override
    public void onMessage(Message message, byte[] pattern) {
        /** key ,会把key返回,而不会将value返回*/
        String expiredKey = message.toString();
        log.info("过期缓存key:" + expiredKey);
        try {
            //登陆信息过期 若expiredKey以login开始则打印log
            if (expiredKey.startsWith("login")){
                log.info("---------redis 过期缓存处理");
            }

        } catch (Exception e) {
            log.info("---------redis 过期缓存处理 异常---------");
            e.printStackTrace();
        }

    }

}

通过开启key过期的事件通知,当key过期时,会发布过期事件;我们定义key过期事件的监听器,当key过期时,就能收到回调通知。
注意:
  1)由于Redis key过期删除是定时+惰性,当key过多时,删除会有延迟,回调通知同样会有延迟。
  2)回调通知是一次性的,没有ack机制,若收到通知后处理失败,将不再收到通知。
  3)回调通知只能拿到key,拿不到value。

使用场景:
  1)可以实现延时队列
    消息作为key,将需要延迟的时间设置为key的TTL,当key过期时,在监听器收到通知,达到延迟的效果。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值