diff --git a/cloud-common/cloud-common-caffeine/src/main/java/com/muyu/common/caffeine/bean/CaffeineManager.java b/cloud-common/cloud-common-caffeine/src/main/java/com/muyu/common/caffeine/bean/CaffeineManager.java index 768553b..df33d6b 100644 --- a/cloud-common/cloud-common-caffeine/src/main/java/com/muyu/common/caffeine/bean/CaffeineManager.java +++ b/cloud-common/cloud-common-caffeine/src/main/java/com/muyu/common/caffeine/bean/CaffeineManager.java @@ -1,6 +1,7 @@ package com.muyu.common.caffeine.bean; +import com.muyu.common.caffeine.enums.CacheNameEnums; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import com.github.benmanes.caffeine.cache.Caffeine; @@ -11,10 +12,12 @@ import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; /** + * Caffeine管理器 * @Author: 胡杨 * @Name: CaffeineCacheConfig * @Description: Caffeine管理器 @@ -25,8 +28,6 @@ import java.util.List; @Slf4j @Component public class CaffeineManager { - @Value("#{'${cacheNames}'.split(',')}") - private List cacheNames; /** * 创建缓存管理器 @@ -35,6 +36,7 @@ public class CaffeineManager { @Bean public CacheManager cacheManager() { SimpleCacheManager cacheManager = new SimpleCacheManager(); + List cacheNames = CacheNameEnums.getCodes(); cacheManager.setCaches(cacheNames.stream() .map(name -> new CaffeineCache( name, diff --git a/cloud-common/cloud-common-caffeine/src/main/java/com/muyu/common/caffeine/constents/CaffeineContent.java b/cloud-common/cloud-common-caffeine/src/main/java/com/muyu/common/caffeine/constents/CaffeineContent.java index cb1e014..251bc9b 100644 --- a/cloud-common/cloud-common-caffeine/src/main/java/com/muyu/common/caffeine/constents/CaffeineContent.java +++ b/cloud-common/cloud-common-caffeine/src/main/java/com/muyu/common/caffeine/constents/CaffeineContent.java @@ -1,6 +1,7 @@ package com.muyu.common.caffeine.constents; /** + * Caffeine常量 * @Author: 胡杨 * @Name: CaffeineContent * @Description: Caffeine常量 diff --git a/cloud-common/cloud-common-caffeine/src/main/java/com/muyu/common/caffeine/enums/CacheNameEnums.java b/cloud-common/cloud-common-caffeine/src/main/java/com/muyu/common/caffeine/enums/CacheNameEnums.java new file mode 100644 index 0000000..d521517 --- /dev/null +++ b/cloud-common/cloud-common-caffeine/src/main/java/com/muyu/common/caffeine/enums/CacheNameEnums.java @@ -0,0 +1,66 @@ +package com.muyu.common.caffeine.enums; + +import lombok.Getter; + +import java.util.Arrays; +import java.util.List; + +/** + * 缓存分区枚举 + * + * @Author: 胡杨 + * @Name: CacheNameEnums + * @Description: 缓存分区枚举 + * @CreatedDate: 2024/10/2 上午9:17 + * @FilePath: com.muyu.common.caffeine.enums + */ + +@Getter +public enum CacheNameEnums { + FAULT("fault", "故障"), + FENCE("fence", "围栏"), + WARMING("warming", "预警"); + + private final String code; + private final String info; + + CacheNameEnums(String code, String info) { + this.code = code; + this.info = info; + } + + /** + * 鉴别参数是否是枚举的值 + * + * @param code 需鉴别参数 + * @return 如果存在返回结果turn, 否则返回false + */ + public static boolean isCode(String code) { + return Arrays.stream(values()) + .map(CacheNameEnums::getCode) + .anyMatch(c -> c.equals(code)); + } + + /** + * 获取枚举Value + * @param code 编码 + * @return Value + */ + public static String getInfo(String code) { + return Arrays.stream(values()) + .filter(c -> c.getCode().equals(code)) + .map(CacheNameEnums::getInfo) + .findFirst() + .orElse(""); + } + + /** + * 获取所有code + * @return code集合 + */ + public static List getCodes() { + return Arrays.stream(values()) + .map(CacheNameEnums::getCode) + .toList(); + } +} diff --git a/cloud-common/cloud-common-caffeine/src/main/java/com/muyu/common/caffeine/utils/CaffeineCacheUtils.java b/cloud-common/cloud-common-caffeine/src/main/java/com/muyu/common/caffeine/utils/CaffeineCacheUtils.java index 0cb793b..9064bf9 100644 --- a/cloud-common/cloud-common-caffeine/src/main/java/com/muyu/common/caffeine/utils/CaffeineCacheUtils.java +++ b/cloud-common/cloud-common-caffeine/src/main/java/com/muyu/common/caffeine/utils/CaffeineCacheUtils.java @@ -4,6 +4,7 @@ package com.muyu.common.caffeine.utils; import com.github.benmanes.caffeine.cache.Cache; import com.github.benmanes.caffeine.cache.Caffeine; import com.muyu.common.caffeine.constents.CaffeineContent; +import com.muyu.common.caffeine.enums.CacheNameEnums; import com.muyu.common.redis.service.RedisService; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; @@ -28,32 +29,25 @@ import java.util.Collection; @Slf4j @Component public class CaffeineCacheUtils { - @Resource - private RedisService redisService; @Resource private CacheManager cacheManager; + @Resource + private RedisTemplate redisTemplate; -// /** -// * 车辆上线 - 新增缓存 -// */ -// public void addCarCache(String vin) { -// -// ArrayList caches = new ArrayList<>(); -// // 从Redis中获取缓存信息 -// Collection keys = redisTemplate.keys(CaffeineContent.CAR_VIN_KEY + vin); -// keys.forEach(key -> { -// Object string = redisTemplate.opsForValue().get(key); -// Cache cache = Caffeine.newBuilder().build(); -// cache.put(key, string); -// // 全部存储到 CaffeineCache集合 -// caches.add(new CaffeineCache(vin, cache)); -// log.info("存储缓存,vin:{}, key:{}, value:{}", vin, key, string); -// }); -// simpleCacheManager.setCaches(caches); -// log.info("车辆编码:{},本地缓存完成...",vin); -// } -// + /** + * 车辆上线 - 新增缓存 + */ + public void addCarCache(String vin) { + // 从Redis中获取缓存信息 + for (String name : CacheNameEnums.getCodes()) { + String value = redisTemplate.opsForValue().get(name+":"+vin); + cacheManager.getCache(name).put(vin, value); + log.info("存储缓存, 缓存分区:[{}], 车辆编码:[{}], 存储值:[{}]", name, vin, value); + } + log.info("车辆编码:{},本地缓存完成...",vin); + } + /** * 车辆下线 - 删除缓存 */ diff --git a/cloud-data-processing/src/main/java/com/muyu/data/processing/controller/TestController.java b/cloud-data-processing/src/main/java/com/muyu/data/processing/controller/TestController.java index 4d88497..dec37dc 100644 --- a/cloud-data-processing/src/main/java/com/muyu/data/processing/controller/TestController.java +++ b/cloud-data-processing/src/main/java/com/muyu/data/processing/controller/TestController.java @@ -1,6 +1,7 @@ package com.muyu.data.processing.controller; +import com.muyu.common.caffeine.enums.CacheNameEnums; import com.muyu.common.core.utils.uuid.UUID; import com.muyu.common.iotdb.config.IotDBConfig; import com.muyu.common.kafka.constants.KafkaConstants; @@ -130,6 +131,10 @@ public class TestController { @GetMapping("/testDelCache") public void testDelCache(@RequestParam("cacheName") String cacheName) { + if (!CacheNameEnums.isCode(cacheName)){ + log.info("缓存分区不存在"); + return; + } Cache cache = cacheManager.getCache(cacheName); if (cache != null) { cache.invalidate(); diff --git a/cloud-data-processing/src/main/java/com/muyu/data/processing/rebbit/DownlineRabbitConsumer.java b/cloud-data-processing/src/main/java/com/muyu/data/processing/rebbit/DownlineRabbitConsumer.java index 73df71c..c26966c 100644 --- a/cloud-data-processing/src/main/java/com/muyu/data/processing/rebbit/DownlineRabbitConsumer.java +++ b/cloud-data-processing/src/main/java/com/muyu/data/processing/rebbit/DownlineRabbitConsumer.java @@ -11,7 +11,7 @@ import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.annotation.Queue; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.cache.Cache; -import org.springframework.cache.support.SimpleCacheManager; +import org.springframework.cache.CacheManager; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; @@ -33,7 +33,7 @@ public class DownlineRabbitConsumer { @Resource private RedisTemplate redisTemplate; @Resource - private SimpleCacheManager simpleCacheManager; + private CacheManager cacheManager; @RabbitListener(queuesToDeclare = {@Queue(RabbitConstants.DOWNLINE_QUEUE)}) public void downline(String vin, Message message, Channel channel) { @@ -64,7 +64,7 @@ public class DownlineRabbitConsumer { * 车辆下线 - 删除缓存 */ public void deleteCarCache(String vin) { - Cache cache = simpleCacheManager.getCache(vin); + Cache cache = cacheManager.getCache(vin); if (ObjectUtils.isNotEmpty(cache)){ cache.invalidate(); } diff --git a/cloud-data-processing/src/main/java/com/muyu/data/processing/rebbit/GoOnlineRabbitConsumer.java b/cloud-data-processing/src/main/java/com/muyu/data/processing/rebbit/GoOnlineRabbitConsumer.java index 726ace3..874e325 100644 --- a/cloud-data-processing/src/main/java/com/muyu/data/processing/rebbit/GoOnlineRabbitConsumer.java +++ b/cloud-data-processing/src/main/java/com/muyu/data/processing/rebbit/GoOnlineRabbitConsumer.java @@ -9,10 +9,13 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.annotation.Queue; import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.cache.CacheManager; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import java.io.IOException; +import java.util.List; /** * 上线事件监听 @@ -28,8 +31,11 @@ import java.io.IOException; public class GoOnlineRabbitConsumer { @Resource private RedisTemplate redisTemplate; + @Resource + private CacheManager cacheManager; - + @Value("#{'${cacheNames}'.split(',')}") + private List cacheNames; @RabbitListener(queuesToDeclare = {@Queue(RabbitConstants.GO_ONLINE_QUEUE)}) public void goOnline(String vin, Message message, Channel channel){ @@ -60,17 +66,11 @@ public class GoOnlineRabbitConsumer { */ public void addCarCache(String vin) { // 从Redis中获取缓存信息 -// ArrayList caches = new ArrayList<>(); -// Cache cache = Caffeine.newBuilder().build(); -// Collection keys = redisTemplate.keys(vin+":*"); -// keys.forEach(key -> { -// String value = redisTemplate.opsForValue().get(key); -// cache.put(key, value); -// // 全部存储到 CaffeineCache集合 -// caches.add(new CaffeineCache(key, cache)); -// log.info("存储缓存,vin:{}, key:{}, value:{}", vin, key, value); -// }); -// simpleCacheManager.setCaches(caches); -// log.info("车辆编码:{},本地缓存完成...",vin); + for (String name : cacheNames) { + String value = redisTemplate.opsForValue().get(name+":"+vin); + cacheManager.getCache(name).put(vin, value); + log.info("存储缓存, 缓存分区:[{}], 车辆编码:[{}], 存储值:[{}]", name, vin, value); + } + log.info("车辆编码:{},本地缓存完成...",vin); } }