CollisionAvoidanceSystem/src/main/java/com/dongni/collisionavoidance/config/RedisConfig.java

134 lines
5.3 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}