java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > springboot redis key失效

spring boot redis中的key失效监听的问题解决

作者:程序员阿明

本文主要介绍了spring boot redis中的key失效监听的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1、spring boot连接配置redis参考这篇文章

https://www.jb51.net/program/339977yti.htm

2、首先开启redis的事件失效推送功能,如果是redis容器启动,参考下面的方式启动容器

docker run --restart=always -itd --name redis -p 6379:6379 redis redis-server --notify-keyspace-events Ex --requirepass xxxxxx

然后在redis客户端下面使用如下方式验证

CONFIG GET notify-keyspace-events

3、在spring boot 中新建服务类RedisKeyExpirationListener,用于捕捉获取redis中的key失效

package com.example.redis_sub.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.stereotype.Component;

@Slf4j
@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
    public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
        super(listenerContainer);
    }

    @Override
    public void onMessage(Message message, byte[] pattern) {
        // 用户做自己的业务处理即可,注意message.toString()可以获取失效的key
        System.out.println("key失效");
        String expiredKey = message.toString();
        System.out.println(expiredKey);
        System.out.println(new String(pattern));
        //业务逻辑

    }
}

4、新建配置类RedisConfig

package com.example.redis_sub.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.listener.PatternTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;

@Configuration
public class RedisConfig {

    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {

        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        // 事件以__keyevent@<db>__为前缀进行发布
//        container.addMessageListener(new RedisKeyExpirationListener(container), new PatternTopic("__keyevent@0__" +
//                ":expired"));
        container.addMessageListener(new RedisKeyExpirationListener(container), new PatternTopic("__keyevent@0__" +
                ":expired"));
        return container;
    }


}

 到此这篇关于spring boot redis中的key失效监听的问题解决的文章就介绍到这了,更多相关springboot redis key失效内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文