From 344b3c600fabf6417f07f7b49ce66ec52b3426d1 Mon Sep 17 00:00:00 2001 From: wangshilong Date: Mon, 9 Dec 2024 12:57:11 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BC=93=E5=AD=98=E6=B8=85=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modbus/data/CacheService.java | 47 +++++++++++++++++++ .../modbus/data/PersistenceHandler.java | 2 +- .../ModbusMessagePersistListener.java | 7 ++- 3 files changed, 51 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/isu/gaswellwatch/modbus/data/CacheService.java diff --git a/src/main/java/com/isu/gaswellwatch/modbus/data/CacheService.java b/src/main/java/com/isu/gaswellwatch/modbus/data/CacheService.java new file mode 100644 index 0000000..d6993a6 --- /dev/null +++ b/src/main/java/com/isu/gaswellwatch/modbus/data/CacheService.java @@ -0,0 +1,47 @@ +package com.isu.gaswellwatch.modbus.data; + +import jakarta.annotation.Resource; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.dao.DataAccessException; +import org.springframework.data.redis.core.RedisOperations; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.SessionCallback; +import org.springframework.stereotype.Service; + +import java.util.HashSet; +import java.util.Set; + +/** + * @author 王仕龙 + * 2024/12/9 12:34 + */ +@Service +@SuppressWarnings("all") +public class CacheService { + @Resource(name = "stringRedisTemplate") + private RedisTemplate redisTemplate; + + public void cleanDeviceCache(Long deviceId) { + this.redisTemplate.executePipelined(new SessionCallback() { + @Override + public String execute(RedisOperations operations) throws DataAccessException { + operations.delete(PersistenceHandler.DEVICE_INFO_CACHE + deviceId); + operations.delete(PersistenceHandler.DEVICE_DATA_CACHE + deviceId); + operations.opsForHash().delete(PersistenceHandler.ONLINE_DEVICE_CACHE, deviceId); + return null; + } + }); + + } + + public void cleanAllDeviceCache() { + Set removeKeys = new HashSet<>(); + removeKeys.addAll(this.redisTemplate.keys(PersistenceHandler.DEVICE_INFO_CACHE + "*")); + removeKeys.addAll(this.redisTemplate.keys(PersistenceHandler.DEVICE_DATA_CACHE + "*")); + if (ObjectUtils.isNotEmpty(removeKeys)) { + removeKeys.add(PersistenceHandler.ONLINE_DEVICE_CACHE); + this.redisTemplate.delete(removeKeys); + } + } + +} diff --git a/src/main/java/com/isu/gaswellwatch/modbus/data/PersistenceHandler.java b/src/main/java/com/isu/gaswellwatch/modbus/data/PersistenceHandler.java index 79cc964..ff4616d 100644 --- a/src/main/java/com/isu/gaswellwatch/modbus/data/PersistenceHandler.java +++ b/src/main/java/com/isu/gaswellwatch/modbus/data/PersistenceHandler.java @@ -13,7 +13,7 @@ public interface PersistenceHandler { String ETC_MODBUS_TYPE = "etc"; String SCSS_MODBUS_TYPE = "scss"; - + String COMMAND_CACHE = "modbus:command:"; String DEVICE_INFO_CACHE = "info:device:"; String DEVICE_DATA_CACHE = "data:device:"; String ONLINE_DEVICE_CACHE = "data:device:online"; diff --git a/src/main/java/com/isu/gaswellwatch/modbus/data/listener/ModbusMessagePersistListener.java b/src/main/java/com/isu/gaswellwatch/modbus/data/listener/ModbusMessagePersistListener.java index 7e51e03..3b34c1f 100644 --- a/src/main/java/com/isu/gaswellwatch/modbus/data/listener/ModbusMessagePersistListener.java +++ b/src/main/java/com/isu/gaswellwatch/modbus/data/listener/ModbusMessagePersistListener.java @@ -40,7 +40,6 @@ import java.util.*; @SuppressWarnings("all") public class ModbusMessagePersistListener implements BatchMessageListener { - public static final String COMMAND_CACHE = "modbus:command:"; private static final String COMMAND_SQL = "select * from commands where id = ?"; private static final String COMMAND_POINT_SQL = "select * from command_points where command_id = ?"; @@ -79,7 +78,7 @@ public class ModbusMessagePersistListener implements BatchMessageListener { messagePointMap = new HashMap<>(); collectionMessage = messageSplit[5]; commandId = NumberUtils.createLong(messageSplit[2]); - commandString = Objects.toString(this.redisTemplate.opsForValue().get(COMMAND_CACHE + commandId), ""); + commandString = Objects.toString(this.redisTemplate.opsForValue().get(PersistenceHandler.COMMAND_CACHE + commandId), ""); commandMap = StringUtils.isNotEmpty(commandString) ? JSONUtil.parseObj(commandString) : null; if (ObjectUtils.isEmpty(commandMap)) { commandMap = this.jdbcTemplate.queryForMap(COMMAND_SQL, commandId); @@ -87,7 +86,7 @@ public class ModbusMessagePersistListener implements BatchMessageListener { log.error("指令[{}]不存在,数据: {}", commandId, messageString); continue; } - this.redisTemplate.opsForValue().setIfAbsent(COMMAND_CACHE + commandId, JSONUtil.toJsonStr(commandMap), Duration.ofDays(1)); + this.redisTemplate.opsForValue().setIfAbsent(PersistenceHandler.COMMAND_CACHE + commandId, JSONUtil.toJsonStr(commandMap), Duration.ofDays(1)); } try { String address; @@ -150,7 +149,7 @@ public class ModbusMessagePersistListener implements BatchMessageListener { public void decode(ModbusMessage modbusMessage) { Long commandId = modbusMessage.getCommandId(); - String cacheName = ModbusMessagePersistListener.COMMAND_CACHE + commandId + ":points"; + String cacheName = PersistenceHandler.COMMAND_CACHE + commandId + ":points"; String cachePoints = Objects.toString(this.redisTemplate.opsForValue().get(cacheName), ""); List> commandPointList = StringUtils.isNotEmpty(cachePoints) ? (List) JSONUtil.parseArray(cachePoints) : null;