通过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());
    }
}
相关推荐
Filotimo_27 分钟前
Spring Boot 整合 JdbcTemplate(持久层)
java·spring boot·后端
李慕婉学姐39 分钟前
【开题答辩过程】以《“饭否”食材搭配指南小程序的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·spring·小程序
abments2 小时前
pgsql timestamp without time zone > character varying解决方案
java
sanggou2 小时前
大数据量查询处理方案 - 内存优化与高效展示
java
没有bug.的程序员2 小时前
Java 字节码:看懂 JVM 的“机器语言“
java·jvm·python·spring·微服务
白露与泡影3 小时前
2025年BAT面试题汇总:JVM+Spring+Dubbo+Redis+并发编程
jvm·spring·dubbo
-大头.3 小时前
深入理解 Java 内存区域与 JVM 运行机制
java·jvm
没有bug.的程序员3 小时前
JVM 整体架构:一套虚拟机的心脏与血管
java·jvm·spring boot·spring cloud·架构
晨枫阳3 小时前
不同语言的元组对比
java·前端·javascript
悟能不能悟3 小时前
怎么在idea合并2个个branch
java·ide·intellij-idea