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