通过spring搭建的一个redis监听器,用于固定时间进行任务处理

1. RedisKeys 类

bash 复制代码
package com.cqcloud.platform.constants;

/**
 * @author weimeilayer@gmail.com ✨
 * @date 💓💕 2024年10月21日 🐬🐇 💓💕
 */
public class RedisKeys {

    /**
     * redis文件夹
     */
    public static final String COLON = ":";
    /**
     * 系统公共参数
     */
    public static final String SYS_PUBLIC_PARAM_LIST = "SysPublicParamList";
    /**
     * 行政区划(根据PID)
     */
    public static final String DIC_CITY_INFO = "DicCityInfo";
    /**
     * 行政区划(根据全程)
     */
    public static final String DIC_CITY_INFO_FOR_NAME = "DicCityInfoForName";
    /**
     * 设备在线状态
     */
    public static final String DEVICE_ONLINE_STATUS = "DeviceOnlineStatus";
    /**
     * 微信开放平台的唯一标识
     */
    public static final String WX_UNION_ID = "WxUnionId";
    /**
     * 微信开放平台的唯一标识(刷新)
     */
    public static final String WX_UNION_ID_REFRESH = "WxUnionIdRefresh";
}

2. KeyExpiredListener 类

bash 复制代码
package com.cqcloud.platform.config;

import com.cqcloud.platform.constants.RedisKeys;
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;
/**
 * redis Key过期监听
 * @author weimeilayer@gmail.com ✨
 * @date 💓💕 2024年9月28日 🐬🐇 💓💕
 */
@Slf4j
@Component
public class KeyExpiredListener extends KeyExpirationEventMessageListener {

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

    @Override
    public void onMessage(Message message) {
        String expiredKey = message.toString();
        log.info("Expired key: {}", expiredKey);

        if (expiredKey.startsWith(RedisKeys.DEVICE_ALARM_RECORD + RedisKeys.COLON)) {
            String id = expiredKey.substring((RedisKeys.DEVICE_ALARM_RECORD + RedisKeys.COLON).length());
            log.info("Alarm record expired: {}", id);
            // 这里可以注入服务并处理过期逻辑
        }

        if (expiredKey.startsWith(RedisKeys.WX_UNION_ID_REFRESH + RedisKeys.COLON)) {
            String unionId = expiredKey.substring((RedisKeys.WX_UNION_ID_REFRESH + RedisKeys.COLON).length());
            log.info("WX Union ID refreshed: {}", unionId);
            // 这里可以注入服务并处理过期逻辑
        }
    }
}

3. RedisConfiguration 类

/**

bash 复制代码
package com.cqcloud.platform.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.RedisMessageListenerContainer;

@Configuration
public class RedisConfiguration {

    private final RedisConnectionFactory redisConnectionFactory;

    public RedisConfiguration(RedisConnectionFactory redisConnectionFactory) {
        this.redisConnectionFactory = redisConnectionFactory;
    }

    @Bean
    public RedisMessageListenerContainer redisMessageListenerContainer() {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(redisConnectionFactory);
        return container;
    }

    @Bean
    public KeyExpiredListener keyExpiredListener() {
        return new KeyExpiredListener(redisMessageListenerContainer());
    }
}
相关推荐
工业甲酰苯胺38 分钟前
Redis性能优化的18招
数据库·redis·性能优化
冰帝海岸42 分钟前
01-spring security认证笔记
java·笔记·spring
世间万物皆对象1 小时前
Spring Boot核心概念:日志管理
java·spring boot·单元测试
没书读了2 小时前
ssm框架-spring-spring声明式事务
java·数据库·spring
小二·2 小时前
java基础面试题笔记(基础篇)
java·笔记·python
开心工作室_kaic2 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
懒洋洋大魔王2 小时前
RocketMQ的使⽤
java·rocketmq·java-rocketmq
武子康2 小时前
Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据仓库·sql·mybatis·springboot·springcloud
转世成为计算机大神3 小时前
易考八股文之Java中的设计模式?
java·开发语言·设计模式
qq_327342733 小时前
Java实现离线身份证号码OCR识别
java·开发语言