通过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());
    }
}
相关推荐
zihao_tom16 小时前
Spring 简介
java·后端·spring
givemeacar16 小时前
spring session、spring security和redis整合的简单使用
redis·spring·bootstrap
kiku181816 小时前
NoSQL之Redis配置与优化
数据库·redis·非关系型数据库
C雨后彩虹16 小时前
Java Lambda & Stream 避坑指南:20个高频错误案例分析与修复
java·stream·lambda·并行流
环流_16 小时前
多线程3(线程安全问题及解决方案)
java·开发语言
杰克尼16 小时前
天机学堂项目总结(day1~day2)
大数据·jvm·spring·elasticsearch·搜索引擎·spring cloud·mybatis
小锋java123416 小时前
Redis可不仅仅是一个简单的KV缓存工具,在Java项目里还有八大场景妙用。。。
redis
FeBaby16 小时前
Java 高并发场景下 Redis 分布式锁(UUID+Lua)最佳实践
java·redis·分布式
落子君16 小时前
设计模式之【 断路器模式】
java
添砖java。。。17 小时前
java实现mqtt链接并控制门锁设备
java·开发语言