| | |
| | | import com.fasterxml.jackson.annotation.PropertyAccessor; |
| | | import com.fasterxml.jackson.databind.ObjectMapper; |
| | | import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator; |
| | | import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; |
| | | import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; |
| | | import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.dromara.common.core.utils.SpringUtils; |
| | | import org.dromara.common.redis.config.properties.RedissonProperties; |
| | | import org.dromara.common.redis.handler.KeyPrefixHandler; |
| | | import org.dromara.common.redis.manager.PlusSpringCacheManager; |
| | | import org.dromara.common.redis.handler.RedisExceptionHandler; |
| | | import org.redisson.client.codec.StringCodec; |
| | | import org.redisson.codec.CompositeCodec; |
| | | import org.redisson.codec.TypedJsonJacksonCodec; |
| | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.boot.autoconfigure.AutoConfiguration; |
| | | import org.springframework.boot.context.properties.EnableConfigurationProperties; |
| | | import org.springframework.cache.CacheManager; |
| | | import org.springframework.cache.annotation.EnableCaching; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.core.task.VirtualThreadTaskExecutor; |
| | | |
| | | import java.time.LocalDateTime; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.TimeZone; |
| | | |
| | | /** |
| | | * redis配置 |
| | |
| | | */ |
| | | @Slf4j |
| | | @AutoConfiguration |
| | | @EnableCaching |
| | | @EnableConfigurationProperties(RedissonProperties.class) |
| | | public class RedisConfig { |
| | | |
| | | @Autowired |
| | | private RedissonProperties redissonProperties; |
| | | |
| | | @Autowired |
| | | private ObjectMapper objectMapper; |
| | | |
| | | @Bean |
| | | public RedissonAutoConfigurationCustomizer redissonCustomizer() { |
| | | return config -> { |
| | | ObjectMapper om = objectMapper.copy(); |
| | | JavaTimeModule javaTimeModule = new JavaTimeModule(); |
| | | DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); |
| | | javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(formatter)); |
| | | javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(formatter)); |
| | | ObjectMapper om = new ObjectMapper(); |
| | | om.registerModule(javaTimeModule); |
| | | om.setTimeZone(TimeZone.getDefault()); |
| | | om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); |
| | | // 指定序列化输入的类型,类必须是非final修饰的。序列化时将对象全类名一起保存下来 |
| | | om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL); |
| | | // LoggerFactory.useSlf4jLogging(true); |
| | | // FuryCodec furyCodec = new FuryCodec(); |
| | | // CompositeCodec codec = new CompositeCodec(StringCodec.INSTANCE, furyCodec, furyCodec); |
| | | TypedJsonJacksonCodec jsonCodec = new TypedJsonJacksonCodec(Object.class, om); |
| | | // 组合序列化 key 使用 String 内容使用通用 json 格式 |
| | | CompositeCodec codec = new CompositeCodec(StringCodec.INSTANCE, jsonCodec, jsonCodec); |
| | | config.setThreads(redissonProperties.getThreads()) |
| | | .setNettyThreads(redissonProperties.getNettyThreads()) |
| | | // 缓存 Lua 脚本 减少网络传输(redisson 大部分的功能都是基于 Lua 脚本实现) |
| | | .setUseScriptCache(true) |
| | | .setCodec(codec); |
| | | if (SpringUtils.isVirtual()) { |
| | | config.setNettyExecutor(new VirtualThreadTaskExecutor("redisson-")); |
| | | } |
| | | RedissonProperties.SingleServerConfig singleServerConfig = redissonProperties.getSingleServerConfig(); |
| | | if (ObjectUtil.isNotNull(singleServerConfig)) { |
| | | // 使用单机模式 |
| | |
| | | } |
| | | |
| | | /** |
| | | * 自定义缓存管理器 整合spring-cache |
| | | * 异常处理器 |
| | | */ |
| | | @Bean |
| | | public CacheManager cacheManager() { |
| | | return new PlusSpringCacheManager(); |
| | | public RedisExceptionHandler redisExceptionHandler() { |
| | | return new RedisExceptionHandler(); |
| | | } |
| | | |
| | | /** |
| | | * redis集群配置 yml |
| | | * |
| | | * --- # redis 集群配置(单机与集群只能开启一个另一个需要注释掉) |
| | | * spring: |
| | | * spring.data: |
| | | * redis: |
| | | * cluster: |
| | | * nodes: |
| | |
| | | * # 连接超时时间 |
| | | * timeout: 10s |
| | | * # 是否开启ssl |
| | | * ssl: false |
| | | * ssl.enabled: false |
| | | * |
| | | * redisson: |
| | | * # 线程池数量 |