4 changed files with 152 additions and 8 deletions
@ -0,0 +1,135 @@ |
|||
package com.cyjd.rights.config; |
|||
|
|||
import com.fasterxml.jackson.annotation.JsonAutoDetect; |
|||
import com.fasterxml.jackson.annotation.PropertyAccessor; |
|||
import com.fasterxml.jackson.databind.ObjectMapper; |
|||
import org.springframework.beans.factory.annotation.Value; |
|||
import org.springframework.cache.CacheManager; |
|||
import org.springframework.cache.annotation.CachingConfigurerSupport; |
|||
import org.springframework.cache.annotation.EnableCaching; |
|||
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.connection.RedisConnectionFactory; |
|||
import org.springframework.data.redis.core.RedisTemplate; |
|||
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; |
|||
import org.springframework.data.redis.serializer.RedisSerializationContext; |
|||
import org.springframework.data.redis.serializer.RedisSerializer; |
|||
import org.springframework.data.redis.serializer.StringRedisSerializer; |
|||
import org.springframework.scheduling.annotation.EnableScheduling; |
|||
import redis.clients.jedis.JedisPool; |
|||
import redis.clients.jedis.JedisPoolConfig; |
|||
|
|||
import java.time.Duration; |
|||
import java.util.concurrent.TimeUnit; |
|||
|
|||
/** |
|||
* @author jhf |
|||
* @date 2020/3/23 12:06 |
|||
*/ |
|||
@Configuration |
|||
@EnableCaching//启用缓存,这个注解很重要
|
|||
@EnableScheduling // ;
|
|||
public class RedisConfig extends CachingConfigurerSupport { |
|||
|
|||
// 失效时间
|
|||
// @Value("${spring.cache.redis.time-to-live}")
|
|||
private Duration timeToLive = Duration.ofHours(12); |
|||
|
|||
@Value("${spring.redis.host}") |
|||
private String host; |
|||
|
|||
@Value("${spring.redis.port}") |
|||
private int port; |
|||
|
|||
// @Value("${spring.redis.timeout}")
|
|||
private int timeout = 1000; |
|||
|
|||
@Value("${spring.redis.jedis.pool.max-idle}") |
|||
private int maxIdle; |
|||
|
|||
@Value("${spring.redis.jedis.pool.max-wait}") |
|||
private long maxWaitMillis; |
|||
|
|||
@Value("${spring.redis.password}") |
|||
private String password; |
|||
|
|||
@Value("${spring.redis.block-when-exhausted}") |
|||
private boolean blockWhenExhausted; |
|||
|
|||
@Bean |
|||
public JedisPool redisPoolFactory() throws Exception{ |
|||
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); |
|||
// 是否启用pool的jmx管理功能, 默认true
|
|||
jedisPoolConfig.setMaxIdle(1000); |
|||
jedisPoolConfig.setMaxWaitMillis(3000); |
|||
// 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true
|
|||
jedisPoolConfig.setBlockWhenExhausted(true); |
|||
jedisPoolConfig.setTestOnBorrow(true); |
|||
jedisPoolConfig.setTestWhileIdle(true); |
|||
jedisPoolConfig.setMinEvictableIdleTimeMillis(60000); |
|||
jedisPoolConfig.setTimeBetweenEvictionRunsMillis(30000); |
|||
jedisPoolConfig.setNumTestsPerEvictionRun(-1); |
|||
jedisPoolConfig.setMaxTotal(1200); |
|||
jedisPoolConfig.setTestOnReturn(true); |
|||
// 是否启用pool的jmx管理功能, 默认true
|
|||
jedisPoolConfig.setJmxEnabled(true); |
|||
|
|||
|
|||
JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout, password); |
|||
return jedisPool; |
|||
} |
|||
|
|||
@Bean(name = "redisTemplate") |
|||
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { |
|||
RedisTemplate<String, Object> template = new RedisTemplate<>(); |
|||
template.setConnectionFactory(redisConnectionFactory); |
|||
//使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值
|
|||
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class); |
|||
ObjectMapper mapper = new ObjectMapper(); |
|||
mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); |
|||
mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); |
|||
jackson2JsonRedisSerializer.setObjectMapper(mapper); |
|||
template.setValueSerializer(jackson2JsonRedisSerializer); |
|||
|
|||
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); |
|||
//使用StringRedisSerializer来序列化和反序列化redis的key值
|
|||
template.setKeySerializer(stringRedisSerializer); |
|||
// template.setKeySerializer(stringRedisSerializer);
|
|||
// hash的key也采用String的序列化方式
|
|||
template.setHashKeySerializer(stringRedisSerializer); |
|||
// value序列化方式采用jackson
|
|||
template.setValueSerializer(jackson2JsonRedisSerializer); |
|||
// hash的value序列化方式采用jackson
|
|||
template.setHashValueSerializer(jackson2JsonRedisSerializer); |
|||
template.afterPropertiesSet(); |
|||
//设置缓存过期时间
|
|||
template.expire("",3600 * 12L, TimeUnit.SECONDS); |
|||
return template; |
|||
} |
|||
@Bean |
|||
public CacheManager cacheManager(RedisConnectionFactory factory) { |
|||
RedisSerializer<String> redisSerializer = new StringRedisSerializer(); |
|||
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); |
|||
|
|||
//解决查询缓存转换异常的问题
|
|||
ObjectMapper om = new ObjectMapper(); |
|||
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); |
|||
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); |
|||
jackson2JsonRedisSerializer.setObjectMapper(om); |
|||
|
|||
// 配置序列化(解决乱码的问题)
|
|||
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig() |
|||
.entryTtl(timeToLive) |
|||
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer)) |
|||
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer)) |
|||
.disableCachingNullValues(); |
|||
|
|||
RedisCacheManager cacheManager = RedisCacheManager.builder(factory) |
|||
.cacheDefaults(config) |
|||
.build(); |
|||
return cacheManager; |
|||
} |
|||
} |
|||
|
|||
Loading…
Reference in new issue