赞
踩
依赖
- <!--springboot redis-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-redis</artifactId>
- </dependency>
配置
- #redis
- # Redis数据库索引(默认为0)
- spring.redis.database=0
- # Redis服务器地址
- spring.redis.host=127.0.0.1
- # Redis服务器连接端口
- spring.redis.port=6379
- # Redis服务器连接密码(默认为空)
- spring.redis.password=love
- # 连接池最大连接数(使用负值表示没有限制)
- spring.redis.jedis.pool.max-active=16
- # 连接池最大阻塞等待时间(使用负值表示没有限制)
- spring.redis.jedis.pool.max-wait=-1
- # 连接池中的最大空闲连接
- spring.redis.jedis.pool.max-idle=8
- # 连接池中的最小空闲连接
- spring.redis.jedis.pool.min-idle=0
- # 连接超时时间(毫秒)
- spring.redis.timeout=60000
-
- #缓存默认过期时间 秒
- redis.cache.default.ttl=86400
在spring boot 2.x中配好redis后,spring就已经为我们创建好了对应的cacheManage,在使用@Cacheable等缓存注解后,缓存就会存到redis中
但是我们需要的自定义配置,如redisTemplate的key,value的序列化规则(默认是jdk的JdkSerializationRedisSerializer),以及缓存的默认过期时间(默认无),还有就是保存的键的生成策略
我的配置代码
- @Configuration
- public class RedisConfiguration extends CachingConfigurerSupport {
-
- @Value("${redis.cache.default.ttl}")
- private long ttl;
-
- /**
- * redisTemplate
- * @param factory
- * @return
- */
- @Bean
- public RedisTemplate<Object,Object> redisTemplate(RedisConnectionFactory factory){
- RedisTemplate<Object,Object> redisTemplate = new RedisTemplate();
- redisTemplate.setConnectionFactory(factory);
-
- // 使用Jackson2JsonRedisSerialize 替换默认序列化 JdkSerializationRedisSerializer 不替换可能出现乱码
- 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);
-
- // 设置value的序列化规则和 key的序列化规则
- //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式)
- redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
- //使用StringRedisSerializer来序列化和反序列化redis的key值
- redisTemplate.setKeySerializer(new StringRedisSerializer());
- redisTemplate.afterPropertiesSet();
-
- return redisTemplate;
- }
-
-
- /**
- * 和spring提供的一样
- * @param factory
- * @return
- */
- @Bean
- public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory factory){
- StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
- stringRedisTemplate.setConnectionFactory(factory);
- return stringRedisTemplate;
- }
-
- /**
- * redis缓存配置
- * spring2 整合 redis 后,已存在
- * 可自定义配置
- */
- @Bean
- public CacheManager cacheManager(RedisConnectionFactory factory) {
- RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofSeconds(ttl));
- return RedisCacheManager.builder(RedisCacheWriter.nonLockingRedisCacheWriter(factory)).cacheDefaults(redisCacheConfiguration).build();
- }
-
- @Override
- public KeyGenerator keyGenerator() {
- return new KeyGenerator() {
- @Override
- public Object generate(Object target, Method method, Object... params) {
- StringBuilder sb = new StringBuilder();
- sb.append(target.getClass().getName());
- sb.append(":");
- sb.append(method.getName());
- for (Object obj : params) {
- sb.append(":" + obj);
- }
- String rsToUse = String.valueOf(sb);
- System.out.println(ttl);
- System.out.println("调用Redis缓存Key : " + rsToUse);
- return rsToUse;
- }
- };
- }
- }
这种缓存配置,就针对于使用注解@Cacheable @CachePut @CacheEvit进行缓存
也可以自定义注解实现reidis缓存,可自定义更多可需要的操作,可参考SpringBoot Redis 缓存失效设置(手写
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。