通过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());
    }
}
相关推荐
NE_STOP6 小时前
Vide Coding--AI编程工具的选择
java
码云数智-园园6 小时前
C++20 Modules 模块详解
java·开发语言·spring
程序员黑豆6 小时前
JDK 下载安装与配置详细教程
java·前端·ai编程
小宇宙Zz7 小时前
Maven依赖冲突
java·服务器·maven
swordbob7 小时前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
咖啡八杯7 小时前
GoF设计模式——享元模式
java·spring·设计模式·享元模式
小小工匠7 小时前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
十五喵源码网7 小时前
基于springboot2+vue2的租房管理系统
java·毕业设计·springboot·论文笔记
摇滚侠7 小时前
IDEA 创建 Java 项目 手动整合 SSM 框架
java·ide·intellij-idea
源分享7 小时前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm