134 lines
5.3 KiB
Java
134 lines
5.3 KiB
Java
package com.dongni.collisionavoidance.config;
|
||
|
||
import com.dongni.collisionavoidance.common.model.spatial.VehicleLocation;
|
||
import com.dongni.collisionavoidance.datacollector.model.dto.VehicleLocationInfo;
|
||
import com.dongni.collisionavoidance.common.model.spatial.AirportArea;
|
||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||
import org.springframework.context.annotation.Bean;
|
||
import org.springframework.context.annotation.Configuration;
|
||
import org.springframework.context.annotation.Primary;
|
||
import org.springframework.data.redis.connection.RedisConnectionFactory;
|
||
import org.springframework.data.redis.core.RedisTemplate;
|
||
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
|
||
import org.springframework.data.redis.serializer.StringRedisSerializer;
|
||
|
||
/**
|
||
* Redis缓存配置类 - 支持PostGIS实体序列化
|
||
* 提供多种RedisTemplate以支持不同的数据类型缓存
|
||
*/
|
||
@Configuration
|
||
public class RedisConfig {
|
||
|
||
/**
|
||
* 使用全局ObjectMapper配置,确保与WebSocket序列化一致
|
||
* 注入JacksonConfig中配置的ObjectMapper
|
||
*/
|
||
|
||
/**
|
||
* 默认的字符串RedisTemplate
|
||
* 用于简单的字符串缓存
|
||
*/
|
||
@Bean
|
||
@Primary
|
||
public RedisTemplate<String, String> stringRedisTemplate(RedisConnectionFactory connectionFactory) {
|
||
RedisTemplate<String, String> template = new RedisTemplate<>();
|
||
template.setConnectionFactory(connectionFactory);
|
||
|
||
StringRedisSerializer stringSerializer = new StringRedisSerializer();
|
||
template.setKeySerializer(stringSerializer);
|
||
template.setValueSerializer(stringSerializer);
|
||
template.setHashKeySerializer(stringSerializer);
|
||
template.setHashValueSerializer(stringSerializer);
|
||
|
||
template.afterPropertiesSet();
|
||
return template;
|
||
}
|
||
|
||
/**
|
||
* 原有的VehicleLocationInfo RedisTemplate
|
||
* 保持向后兼容性
|
||
*/
|
||
@Bean
|
||
public RedisTemplate<String, VehicleLocationInfo> vehicleLocationInfoRedisTemplate(
|
||
RedisConnectionFactory connectionFactory, ObjectMapper objectMapper) {
|
||
RedisTemplate<String, VehicleLocationInfo> template = new RedisTemplate<>();
|
||
template.setConnectionFactory(connectionFactory);
|
||
|
||
Jackson2JsonRedisSerializer<VehicleLocationInfo> serializer =
|
||
new Jackson2JsonRedisSerializer<>(objectMapper, VehicleLocationInfo.class);
|
||
|
||
template.setValueSerializer(serializer);
|
||
template.setHashValueSerializer(serializer);
|
||
template.setKeySerializer(new StringRedisSerializer());
|
||
template.setHashKeySerializer(new StringRedisSerializer());
|
||
|
||
template.afterPropertiesSet();
|
||
return template;
|
||
}
|
||
|
||
/**
|
||
* PostGIS车辆位置实体RedisTemplate
|
||
* 用于缓存VehicleLocation实体
|
||
*/
|
||
@Bean
|
||
public RedisTemplate<String, VehicleLocation> vehicleLocationRedisTemplate(
|
||
RedisConnectionFactory connectionFactory, ObjectMapper objectMapper) {
|
||
RedisTemplate<String, VehicleLocation> template = new RedisTemplate<>();
|
||
template.setConnectionFactory(connectionFactory);
|
||
|
||
Jackson2JsonRedisSerializer<VehicleLocation> serializer =
|
||
new Jackson2JsonRedisSerializer<>(objectMapper, VehicleLocation.class);
|
||
|
||
template.setValueSerializer(serializer);
|
||
template.setHashValueSerializer(serializer);
|
||
template.setKeySerializer(new StringRedisSerializer());
|
||
template.setHashKeySerializer(new StringRedisSerializer());
|
||
|
||
template.afterPropertiesSet();
|
||
return template;
|
||
}
|
||
|
||
/**
|
||
* 机场区域实体RedisTemplate
|
||
* 用于缓存AirportArea实体
|
||
*/
|
||
@Bean
|
||
public RedisTemplate<String, AirportArea> airportAreaRedisTemplate(
|
||
RedisConnectionFactory connectionFactory, ObjectMapper objectMapper) {
|
||
RedisTemplate<String, AirportArea> template = new RedisTemplate<>();
|
||
template.setConnectionFactory(connectionFactory);
|
||
|
||
Jackson2JsonRedisSerializer<AirportArea> serializer =
|
||
new Jackson2JsonRedisSerializer<>(objectMapper, AirportArea.class);
|
||
|
||
template.setValueSerializer(serializer);
|
||
template.setHashValueSerializer(serializer);
|
||
template.setKeySerializer(new StringRedisSerializer());
|
||
template.setHashKeySerializer(new StringRedisSerializer());
|
||
|
||
template.afterPropertiesSet();
|
||
return template;
|
||
}
|
||
|
||
/**
|
||
* 通用对象RedisTemplate
|
||
* 用于缓存查询结果、统计数据等通用对象
|
||
*/
|
||
@Bean
|
||
public RedisTemplate<String, Object> objectRedisTemplate(
|
||
RedisConnectionFactory connectionFactory, ObjectMapper objectMapper) {
|
||
RedisTemplate<String, Object> template = new RedisTemplate<>();
|
||
template.setConnectionFactory(connectionFactory);
|
||
|
||
Jackson2JsonRedisSerializer<Object> serializer =
|
||
new Jackson2JsonRedisSerializer<>(objectMapper, Object.class);
|
||
|
||
template.setValueSerializer(serializer);
|
||
template.setHashValueSerializer(serializer);
|
||
template.setKeySerializer(new StringRedisSerializer());
|
||
template.setHashKeySerializer(new StringRedisSerializer());
|
||
|
||
template.afterPropertiesSet();
|
||
return template;
|
||
}
|
||
} |