美文网首页工作生活
spring boot 监听redis session 失效

spring boot 监听redis session 失效

作者: 5eac0cfdd510 | 来源:发表于2019-06-30 18:40 被阅读0次

一、pom文件添加

<!--redis -->
<dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-data-redis</artifactId>
 </dependency>
 <dependency>
       <groupId>org.springframework.session</groupId>
       <artifactId>spring-session-data-redis</artifactId>
 </dependency>
 <dependency>
         <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>3.0.1</version>
 </dependency>

二、redis信息配置

spring:
  redis:
    host: reids的ip
    port: 端口
    password: 密码
    database: 指定redis数据库 (0,1,2...)

三、config处理

@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 30)  //指定session失效时间  单位是s
public class monitorRedisSessionConfig {
    @Value("${spring.redis.host}")
    private String host;
    @Value("${spring.redis.password}")
    private String password;
    @Value("${spring.redis.port}")
    private int port;

    @Autowired
    private RedisConnectionFactory redisConnectionFactory;
    @Bean
    public RedisMessageListenerContainer MonitorredisListenerContainer() {
        RedisMessageListenerContainer redisMessageListenerContainer = new RedisMessageListenerContainer();
        redisMessageListenerContainer.setConnectionFactory(redisConnectionFactory);
        return redisMessageListenerContainer;
    }

    @Bean
    public DmsRedisSessionListener keyExpiredListener() {
        return new DmsRedisSessionListener(this.MonitorredisListenerContainer(),host,password,port);
    }
} 

四、监听类

@Slf4j
public class DmsRedisSessionListener extends KeyExpirationEventMessageListener {
    private String host;
    private String password;
    private int port;

    public DmsRedisSessionListener(RedisMessageListenerContainer listenerContainer, String host, String password, int port) {
        super(listenerContainer);
        this.host = host;
        this.password = password;
        this.port = port;
        log.info("redis session 监听器已启动");
    }

    /**
     * 针对redis数据失效时间,进行数据处理
     * @param message
     * @param pattern
     */
    @Override
    public void onMessage(Message message, byte[] pattern) {
        //Map<Long, Long> cpIdConnIdMap = connectionNodeStatusManager.getCpIdConnIdMap();
        //过期的key
        String key = new String(message.getBody(),StandardCharsets.UTF_8);
        //if(!StringUtil.isEmpty(key)) {
            try {
                getSessionInfo(key.replace("expires:", ""));
            } catch (Exception e) {
                e.printStackTrace();
            }
        //}
    }
    public void getSessionInfo(String key) throws Exception {
        Jedis jedis = new Jedis(host,port);
        jedis.auth(password);
        String cpIdConnId = jedis.hget(key, "sessionAttr:redis1");   //可以通过具体的键获取需要的信息   redis1是set的指定的key
        System.out.println("获取的信息为:"+cpIdConnId);
    }
}

五 结果展示

  • 1 通过接口访问设置session


    setRediSsesion.jpg
  • 2 session 失效结果输出


    result.jpg

    从结果中也可以看到redissession的失效进行监听

六、总结

通过以上操作,我们可以对redis中session失效进行监听。同时在获取需要的信息后可以做一下业务处理。
\color{#ea4335}{注意:自动注入项目服务时需要在config中注入,不能在listener类中注入否则不生效}

七、源代码

码云:https://gitee.com/huangjian163/redisSessionMonitor.git

相关文章

网友评论

    本文标题:spring boot 监听redis session 失效

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