package com.baojiaren.config;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.cache.CacheManager;
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.cache.RedisCacheWriter;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.time.Duration;
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory){
RedisTemplate<Object,Object> redisTemplate=new RedisTemplate<>();
redisTemplate.setConnectionFactory(connectionFactory);
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer=new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper objectMapper=new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
@Bean
public CacheManager cacheManager(RedisConnectionFactory factory){
RedisCacheConfiguration cacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofHours(1))
.disableCachingNullValues()
.serializeKeysWith(RedisSerializationContext.SerializationPair
.fromSerializer(new StringRedisSerializer()))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
return RedisCacheManager.builder(factory).cacheDefaults(cacheConfiguration).build();
}
}
server:
tomcat:
threads:
max: 10
port: 9090
compression:
enabled: true
spring:
redis:
timeout: 10000
host: 139.196.186.27
port: 6379
password: b6356120...
database: 0
lettuce:
pool:
max-active: 1024
max-wait: 10000
max-idle: 200
min-idle: 5
devtools:
restart:
enabled: true
mvc:
hiddenmethod:
filter:
enabled: true
application:
name: order-service-rest
freemarker:
prefer-file-system-access: false
cache:
type: redis
eureka:
instance:
hostname: service-provider
prefer-ip-address: true
instance-id: ${spring.cloud.client.ip-address}:${server.port}
client:
registerWithEureka: false
serviceUrl:
defaultZone: http://root:123456@localhost:8761/eureka/
registry-fetch-interval-seconds: 10
feign:
httpclient:
enabled: true
service-product:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
OkToRetryOnAllOperations: true
MaxAutoRetries: 2
MaxAutoRetriesNextServer: 0
ConnectTimeout: 3000
ReadTimeout: 3000
@Cacheable(cacheNames = "OrderList",unless="#result == null")
@Override
public Order selectOrderById(Integer id) {
return new Order(id, "order-001", "中国", 3199D,
Arrays.asList(productService.selectProductById(id)));
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/img_convert/93c8cd9b58206d7cb76c9a43fa8154e0.png)