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 stringRedisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate 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 vehicleLocationInfoRedisTemplate( RedisConnectionFactory connectionFactory, ObjectMapper objectMapper) { RedisTemplate template = new RedisTemplate<>(); template.setConnectionFactory(connectionFactory); Jackson2JsonRedisSerializer 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 vehicleLocationRedisTemplate( RedisConnectionFactory connectionFactory, ObjectMapper objectMapper) { RedisTemplate template = new RedisTemplate<>(); template.setConnectionFactory(connectionFactory); Jackson2JsonRedisSerializer 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 airportAreaRedisTemplate( RedisConnectionFactory connectionFactory, ObjectMapper objectMapper) { RedisTemplate template = new RedisTemplate<>(); template.setConnectionFactory(connectionFactory); Jackson2JsonRedisSerializer 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 objectRedisTemplate( RedisConnectionFactory connectionFactory, ObjectMapper objectMapper) { RedisTemplate template = new RedisTemplate<>(); template.setConnectionFactory(connectionFactory); Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer<>(objectMapper, Object.class); template.setValueSerializer(serializer); template.setHashValueSerializer(serializer); template.setKeySerializer(new StringRedisSerializer()); template.setHashKeySerializer(new StringRedisSerializer()); template.afterPropertiesSet(); return template; } }