添加缓存

This commit is contained in:
孙小云 2026-01-30 16:34:58 +08:00
parent 557cd153c6
commit 3f53fe82ec
7 changed files with 147 additions and 0 deletions

View File

@ -0,0 +1,77 @@
package com.ruoyi.device.config;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.time.Duration;
import java.util.HashMap;
import java.util.Map;
/**
* Device模块缓存配置
* 为Domain层提供分布式缓存支持
*
* @author ruoyi
* @date 2026-01-30
*/
@Configuration
@EnableCaching
public class DeviceCacheConfig {
/**
* 缓存名称常量
*/
public static final String DEVICE_CACHE = "device";
public static final String DOCK_CACHE = "dock";
public static final String AIRCRAFT_CACHE = "aircraft";
public static final String PAYLOAD_CACHE = "payload";
public static final String DOCK_AIRCRAFT_CACHE = "dockAircraft";
public static final String AIRCRAFT_PAYLOAD_CACHE = "aircraftPayload";
/**
* 配置缓存管理器
* 为不同的实体配置不同的过期时间
*/
@Bean
public CacheManager deviceCacheManager(RedisConnectionFactory connectionFactory) {
// 默认缓存配置30分钟过期
RedisCacheConfiguration defaultConfig = RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofMinutes(30))
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()))
.disableCachingNullValues();
// 为不同实体配置不同的过期时间
Map<String, RedisCacheConfiguration> cacheConfigurations = new HashMap<>();
// 设备信息30分钟基础数据变化较少
cacheConfigurations.put(DEVICE_CACHE, defaultConfig.entryTtl(Duration.ofMinutes(30)));
// 机场信息30分钟基础数据变化较少
cacheConfigurations.put(DOCK_CACHE, defaultConfig.entryTtl(Duration.ofMinutes(30)));
// 无人机信息30分钟基础数据变化较少
cacheConfigurations.put(AIRCRAFT_CACHE, defaultConfig.entryTtl(Duration.ofMinutes(30)));
// 挂载信息30分钟基础数据变化较少
cacheConfigurations.put(PAYLOAD_CACHE, defaultConfig.entryTtl(Duration.ofMinutes(30)));
// 关联关系15分钟关联关系可能变化
cacheConfigurations.put(DOCK_AIRCRAFT_CACHE, defaultConfig.entryTtl(Duration.ofMinutes(15)));
cacheConfigurations.put(AIRCRAFT_PAYLOAD_CACHE, defaultConfig.entryTtl(Duration.ofMinutes(15)));
return RedisCacheManager.builder(connectionFactory)
.cacheDefaults(defaultConfig)
.withInitialCacheConfigurations(cacheConfigurations)
.transactionAware()
.build();
}
}

View File

@ -1,10 +1,14 @@
package com.ruoyi.device.domain.impl;
import com.ruoyi.device.config.DeviceCacheConfig;
import com.ruoyi.device.domain.api.IAircraftDomain;
import com.ruoyi.device.domain.convert.AircraftConvert;
import com.ruoyi.device.domain.model.Aircraft;
import com.ruoyi.device.mapper.AircraftMapper;
import com.ruoyi.device.mapper.entity.AircraftEntity;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching;
import org.springframework.stereotype.Component;
import java.util.List;
@ -34,6 +38,7 @@ public class AircraftDomainImpl implements IAircraftDomain
}
@Override
@Cacheable(value = DeviceCacheConfig.AIRCRAFT_CACHE, key = "'id:' + #aircraftId", unless = "#result == null")
public Aircraft selectAircraftByAircraftId(Long aircraftId)
{
AircraftEntity entity = aircraftMapper.selectAircraftByAircraftId(aircraftId);
@ -41,6 +46,7 @@ public class AircraftDomainImpl implements IAircraftDomain
}
@Override
@Cacheable(value = DeviceCacheConfig.AIRCRAFT_CACHE, key = "'deviceId:' + #deviceId", unless = "#result == null")
public Aircraft selectAircraftByDeviceId(Long deviceId)
{
AircraftEntity entity = aircraftMapper.selectAircraftByDeviceId(deviceId);
@ -58,6 +64,10 @@ public class AircraftDomainImpl implements IAircraftDomain
}
@Override
@Caching(evict = {
@CacheEvict(value = DeviceCacheConfig.AIRCRAFT_CACHE, key = "'id:' + #aircraft.aircraftId"),
@CacheEvict(value = DeviceCacheConfig.AIRCRAFT_CACHE, key = "'deviceId:' + #aircraft.deviceId")
})
public int updateAircraft(Aircraft aircraft)
{
AircraftEntity entity = AircraftConvert.to(aircraft);
@ -65,12 +75,14 @@ public class AircraftDomainImpl implements IAircraftDomain
}
@Override
@CacheEvict(value = DeviceCacheConfig.AIRCRAFT_CACHE, allEntries = true)
public int deleteAircraftByAircraftId(Long aircraftId)
{
return aircraftMapper.deleteAircraftByAircraftId(aircraftId);
}
@Override
@CacheEvict(value = DeviceCacheConfig.AIRCRAFT_CACHE, allEntries = true)
public int deleteAircraftByAircraftIds(Long[] aircraftIds)
{
return aircraftMapper.deleteAircraftByAircraftIds(aircraftIds);

View File

@ -1,10 +1,14 @@
package com.ruoyi.device.domain.impl;
import com.ruoyi.device.config.DeviceCacheConfig;
import com.ruoyi.device.domain.api.IAircraftPayloadDomain;
import com.ruoyi.device.domain.convert.AircraftPayloadConvert;
import com.ruoyi.device.domain.model.AircraftPayload;
import com.ruoyi.device.mapper.AircraftPayloadMapper;
import com.ruoyi.device.mapper.entity.AircraftPayloadEntity;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching;
import org.springframework.stereotype.Component;
import java.util.List;
@ -34,6 +38,7 @@ public class AircraftPayloadDomainImpl implements IAircraftPayloadDomain
}
@Override
@Cacheable(value = DeviceCacheConfig.AIRCRAFT_PAYLOAD_CACHE, key = "'id:' + #id", unless = "#result == null")
public AircraftPayload selectAircraftPayloadById(Long id)
{
AircraftPayloadEntity entity = aircraftPayloadMapper.selectAircraftPayloadById(id);
@ -41,6 +46,7 @@ public class AircraftPayloadDomainImpl implements IAircraftPayloadDomain
}
@Override
@Cacheable(value = DeviceCacheConfig.AIRCRAFT_PAYLOAD_CACHE, key = "'aircraftId:' + #aircraftId", unless = "#result == null")
public List<AircraftPayload> selectAircraftPayloadByAircraftId(Long aircraftId)
{
List<AircraftPayloadEntity> entityList = aircraftPayloadMapper.selectAircraftPayloadListByAircraftId(aircraftId);
@ -48,6 +54,7 @@ public class AircraftPayloadDomainImpl implements IAircraftPayloadDomain
}
@Override
@Cacheable(value = DeviceCacheConfig.AIRCRAFT_PAYLOAD_CACHE, key = "'payloadId:' + #payloadId", unless = "#result == null")
public List<AircraftPayload> selectAircraftPayloadByPayloadId(Long payloadId)
{
List<AircraftPayloadEntity> entityList = aircraftPayloadMapper.selectAircraftPayloadListByPayloadId(payloadId);
@ -55,6 +62,7 @@ public class AircraftPayloadDomainImpl implements IAircraftPayloadDomain
}
@Override
@Cacheable(value = DeviceCacheConfig.AIRCRAFT_PAYLOAD_CACHE, key = "'dockId:' + #dockId", unless = "#result == null")
public List<AircraftPayload> selectAircraftPayloadByDockId(Long dockId)
{
List<AircraftPayloadEntity> entityList = aircraftPayloadMapper.selectAircraftPayloadListByDockId(dockId);
@ -72,6 +80,7 @@ public class AircraftPayloadDomainImpl implements IAircraftPayloadDomain
}
@Override
@CacheEvict(value = DeviceCacheConfig.AIRCRAFT_PAYLOAD_CACHE, allEntries = true)
public int updateAircraftPayload(AircraftPayload aircraftPayload)
{
AircraftPayloadEntity entity = AircraftPayloadConvert.to(aircraftPayload);
@ -79,12 +88,14 @@ public class AircraftPayloadDomainImpl implements IAircraftPayloadDomain
}
@Override
@CacheEvict(value = DeviceCacheConfig.AIRCRAFT_PAYLOAD_CACHE, allEntries = true)
public int deleteAircraftPayloadById(Long id)
{
return aircraftPayloadMapper.deleteAircraftPayloadById(id);
}
@Override
@CacheEvict(value = DeviceCacheConfig.AIRCRAFT_PAYLOAD_CACHE, allEntries = true)
public int deleteAircraftPayloadByIds(Long[] ids)
{
return aircraftPayloadMapper.deleteAircraftPayloadByIds(ids);

View File

@ -1,10 +1,14 @@
package com.ruoyi.device.domain.impl;
import com.ruoyi.device.config.DeviceCacheConfig;
import com.ruoyi.device.domain.api.IDeviceDomain;
import com.ruoyi.device.domain.convert.DeviceConvert;
import com.ruoyi.device.domain.model.Device;
import com.ruoyi.device.mapper.DeviceMapper;
import com.ruoyi.device.mapper.entity.DeviceEntity;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching;
import org.springframework.stereotype.Component;
import java.util.List;
@ -34,6 +38,7 @@ public class DeviceDomainImpl implements IDeviceDomain
}
@Override
@Cacheable(value = DeviceCacheConfig.DEVICE_CACHE, key = "'id:' + #deviceId", unless = "#result == null")
public Device selectDeviceByDeviceId(Long deviceId)
{
DeviceEntity entity = deviceMapper.selectDeviceByDeviceId(deviceId);
@ -41,6 +46,7 @@ public class DeviceDomainImpl implements IDeviceDomain
}
@Override
@Cacheable(value = DeviceCacheConfig.DEVICE_CACHE, key = "'iotId:' + #iotDeviceId", unless = "#result == null")
public Device selectDeviceByIotDeviceId(String iotDeviceId)
{
DeviceEntity entity = deviceMapper.selectDeviceByIotDeviceId(iotDeviceId);
@ -48,6 +54,7 @@ public class DeviceDomainImpl implements IDeviceDomain
}
@Override
@Cacheable(value = DeviceCacheConfig.DEVICE_CACHE, key = "'sn:' + #deviceSn", unless = "#result == null")
public Device selectDeviceByDeviceSn(String deviceSn)
{
DeviceEntity entity = deviceMapper.selectDeviceByDeviceSn(deviceSn);
@ -65,6 +72,11 @@ public class DeviceDomainImpl implements IDeviceDomain
}
@Override
@Caching(evict = {
@CacheEvict(value = DeviceCacheConfig.DEVICE_CACHE, key = "'id:' + #device.deviceId"),
@CacheEvict(value = DeviceCacheConfig.DEVICE_CACHE, key = "'iotId:' + #device.iotDeviceId"),
@CacheEvict(value = DeviceCacheConfig.DEVICE_CACHE, key = "'sn:' + #device.deviceSn")
})
public int updateDevice(Device device)
{
DeviceEntity entity = DeviceConvert.to(device);
@ -72,12 +84,14 @@ public class DeviceDomainImpl implements IDeviceDomain
}
@Override
@CacheEvict(value = DeviceCacheConfig.DEVICE_CACHE, allEntries = true)
public int deleteDeviceByDeviceId(Long deviceId)
{
return deviceMapper.deleteDeviceByDeviceId(deviceId);
}
@Override
@CacheEvict(value = DeviceCacheConfig.DEVICE_CACHE, allEntries = true)
public int deleteDeviceByDeviceIds(Long[] deviceIds)
{
return deviceMapper.deleteDeviceByDeviceIds(deviceIds);

View File

@ -1,10 +1,14 @@
package com.ruoyi.device.domain.impl;
import com.ruoyi.device.config.DeviceCacheConfig;
import com.ruoyi.device.domain.api.IDockAircraftDomain;
import com.ruoyi.device.domain.convert.DockAircraftConvert;
import com.ruoyi.device.domain.model.DockAircraft;
import com.ruoyi.device.mapper.DockAircraftMapper;
import com.ruoyi.device.mapper.entity.DockAircraftEntity;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching;
import org.springframework.stereotype.Component;
import java.util.List;
@ -34,6 +38,7 @@ public class DockAircraftDomainImpl implements IDockAircraftDomain
}
@Override
@Cacheable(value = DeviceCacheConfig.DOCK_AIRCRAFT_CACHE, key = "'id:' + #id", unless = "#result == null")
public DockAircraft selectDockAircraftById(Long id)
{
DockAircraftEntity entity = dockAircraftMapper.selectDockAircraftById(id);
@ -41,6 +46,7 @@ public class DockAircraftDomainImpl implements IDockAircraftDomain
}
@Override
@Cacheable(value = DeviceCacheConfig.DOCK_AIRCRAFT_CACHE, key = "'dockId:' + #dockId", unless = "#result == null")
public List<DockAircraft> selectDockAircraftByDockId(Long dockId)
{
List<DockAircraftEntity> entityList = dockAircraftMapper.selectDockAircraftListByDockId(dockId);
@ -48,6 +54,7 @@ public class DockAircraftDomainImpl implements IDockAircraftDomain
}
@Override
@Cacheable(value = DeviceCacheConfig.DOCK_AIRCRAFT_CACHE, key = "'aircraftId:' + #aircraftId", unless = "#result == null")
public List<DockAircraft> selectDockAircraftByAircraftId(Long aircraftId)
{
List<DockAircraftEntity> entityList = dockAircraftMapper.selectDockAircraftListByAircraftId(aircraftId);
@ -65,6 +72,11 @@ public class DockAircraftDomainImpl implements IDockAircraftDomain
}
@Override
@Caching(evict = {
@CacheEvict(value = DeviceCacheConfig.DOCK_AIRCRAFT_CACHE, key = "'id:' + #dockAircraft.id"),
@CacheEvict(value = DeviceCacheConfig.DOCK_AIRCRAFT_CACHE, key = "'dockId:' + #dockAircraft.dockId"),
@CacheEvict(value = DeviceCacheConfig.DOCK_AIRCRAFT_CACHE, key = "'aircraftId:' + #dockAircraft.aircraftId")
})
public int updateDockAircraft(DockAircraft dockAircraft)
{
DockAircraftEntity entity = DockAircraftConvert.to(dockAircraft);
@ -72,12 +84,14 @@ public class DockAircraftDomainImpl implements IDockAircraftDomain
}
@Override
@CacheEvict(value = DeviceCacheConfig.DOCK_AIRCRAFT_CACHE, allEntries = true)
public int deleteDockAircraftById(Long id)
{
return dockAircraftMapper.deleteDockAircraftById(id);
}
@Override
@CacheEvict(value = DeviceCacheConfig.DOCK_AIRCRAFT_CACHE, allEntries = true)
public int deleteDockAircraftByIds(Long[] ids)
{
return dockAircraftMapper.deleteDockAircraftByIds(ids);

View File

@ -1,10 +1,14 @@
package com.ruoyi.device.domain.impl;
import com.ruoyi.device.config.DeviceCacheConfig;
import com.ruoyi.device.domain.api.IDockDomain;
import com.ruoyi.device.domain.convert.DockConvert;
import com.ruoyi.device.domain.model.Dock;
import com.ruoyi.device.mapper.DockMapper;
import com.ruoyi.device.mapper.entity.DockEntity;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching;
import org.springframework.stereotype.Component;
import java.util.List;
@ -34,6 +38,7 @@ public class DockDomainImpl implements IDockDomain
}
@Override
@Cacheable(value = DeviceCacheConfig.DOCK_CACHE, key = "'id:' + #dockId", unless = "#result == null")
public Dock selectDockByDockId(Long dockId)
{
DockEntity entity = dockMapper.selectDockByDockId(dockId);
@ -41,6 +46,7 @@ public class DockDomainImpl implements IDockDomain
}
@Override
@Cacheable(value = DeviceCacheConfig.DOCK_CACHE, key = "'deviceId:' + #deviceId", unless = "#result == null")
public Dock selectDockByDeviceId(Long deviceId)
{
DockEntity entity = dockMapper.selectDockByDeviceId(deviceId);
@ -58,6 +64,10 @@ public class DockDomainImpl implements IDockDomain
}
@Override
@Caching(evict = {
@CacheEvict(value = DeviceCacheConfig.DOCK_CACHE, key = "'id:' + #dock.dockId"),
@CacheEvict(value = DeviceCacheConfig.DOCK_CACHE, key = "'deviceId:' + #dock.deviceId")
})
public int updateDock(Dock dock)
{
DockEntity entity = DockConvert.to(dock);
@ -65,12 +75,14 @@ public class DockDomainImpl implements IDockDomain
}
@Override
@CacheEvict(value = DeviceCacheConfig.DOCK_CACHE, allEntries = true)
public int deleteDockByDockId(Long dockId)
{
return dockMapper.deleteDockByDockId(dockId);
}
@Override
@CacheEvict(value = DeviceCacheConfig.DOCK_CACHE, allEntries = true)
public int deleteDockByDockIds(Long[] dockIds)
{
return dockMapper.deleteDockByDockIds(dockIds);

View File

@ -1,10 +1,13 @@
package com.ruoyi.device.domain.impl;
import com.ruoyi.device.config.DeviceCacheConfig;
import com.ruoyi.device.domain.api.IPayloadDomain;
import com.ruoyi.device.domain.convert.PayloadConvert;
import com.ruoyi.device.domain.model.Payload;
import com.ruoyi.device.mapper.PayloadMapper;
import com.ruoyi.device.mapper.entity.PayloadEntity;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Component;
import java.util.List;
@ -34,6 +37,7 @@ public class PayloadDomainImpl implements IPayloadDomain
}
@Override
@Cacheable(value = DeviceCacheConfig.PAYLOAD_CACHE, key = "'id:' + #payloadId", unless = "#result == null")
public Payload selectPayloadByPayloadId(Long payloadId)
{
PayloadEntity entity = payloadMapper.selectPayloadByPayloadId(payloadId);
@ -51,6 +55,7 @@ public class PayloadDomainImpl implements IPayloadDomain
}
@Override
@CacheEvict(value = DeviceCacheConfig.PAYLOAD_CACHE, key = "'id:' + #payload.payloadId")
public int updatePayload(Payload payload)
{
PayloadEntity entity = PayloadConvert.to(payload);
@ -58,12 +63,14 @@ public class PayloadDomainImpl implements IPayloadDomain
}
@Override
@CacheEvict(value = DeviceCacheConfig.PAYLOAD_CACHE, allEntries = true)
public int deletePayloadByPayloadId(Long payloadId)
{
return payloadMapper.deletePayloadByPayloadId(payloadId);
}
@Override
@CacheEvict(value = DeviceCacheConfig.PAYLOAD_CACHE, allEntries = true)
public int deletePayloadByPayloadIds(Long[] payloadIds)
{
return payloadMapper.deletePayloadByPayloadIds(payloadIds);