fix: 盐度设置,Redis失效问题解决。

This commit is contained in:
tianyongbao
2026-06-29 22:54:23 +08:00
parent 4313177cf2
commit 2f5b386d18
2 changed files with 29 additions and 15 deletions

View File

@@ -32,6 +32,7 @@ import com.intc.tdengine.domain.DeviceSensorData;
import com.intc.tdengine.service.IDeviceSensorDataService;
import com.intc.iot.config.AliyunIotProperties;
import com.intc.common.redis.utils.RedisUtils;
import com.intc.common.tenant.helper.TenantHelper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
@@ -1045,14 +1046,18 @@ public class DeviceDataHandler {
addCacheName(cacheNames, device.getSerialNum());
addCacheName(cacheNames, device.getIotId());
for (String cacheName : cacheNames) {
String redisKey = PENDING_SOLAR_SALINITY_KEY_PREFIX + cacheName;
Object rawPending = RedisUtils.getCacheObject(redisKey);
if (rawPending != null) {
return new PendingSolarSalinity(redisKey, rawPending);
// 太阳能盐度缓存为跨上下文共享数据HTTP线程写入 + AMQP消费线程读取
// 必须忽略租户前缀,避免写入带租户前缀而读取不带前缀导致 key 不匹配
return TenantHelper.ignore(() -> {
for (String cacheName : cacheNames) {
String redisKey = PENDING_SOLAR_SALINITY_KEY_PREFIX + cacheName;
Object rawPending = RedisUtils.getCacheObject(redisKey);
if (rawPending != null) {
return new PendingSolarSalinity(redisKey, rawPending);
}
}
}
return null;
return null;
});
}
private boolean hasPendingSolarSalinity(String deviceName, Device device) {
@@ -1077,10 +1082,13 @@ public class DeviceDataHandler {
}
private void clearPendingSolarSalinity(String deviceName, Device device, String matchedRedisKey) {
RedisUtils.deleteObject(matchedRedisKey);
deletePendingSolarSalinityByName(deviceName);
deletePendingSolarSalinityByName(device.getSerialNum());
deletePendingSolarSalinityByName(device.getIotId());
// 忽略租户前缀,确保与写入侧 key 一致(写入在 HTTP 线程,删除在 AMQP 线程)
TenantHelper.ignore(() -> {
RedisUtils.deleteObject(matchedRedisKey);
deletePendingSolarSalinityByName(deviceName);
deletePendingSolarSalinityByName(device.getSerialNum());
deletePendingSolarSalinityByName(device.getIotId());
});
}
private void deletePendingSolarSalinityByName(String cacheName) {