springboot1.x和2.x對於整合redis略有不同,需注意。
1、依賴、配置文件
先引入redis的starter:

<!-- redis依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- cache依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency>
然后是在properties或者yml中配置基本信息

# Redis連接池屬性
spring.redis.jedis.pool.mix-idle=5
spring.redis.jedis.pool.max-active=10
spring.redis.jedis.pool.max-idle=10
spring.redis.jedis.pool.max-wait=2000
## Redis服務器屬性
spring.redis.port=6379
spring.redis.host=127.0.0.1
spring.redis.password=root
spring.redis.timeout=1000
spring.redis.database=1
## redis緩存管理器
spring.cache.type=REDIS
spring.cache.cache-names=redisCache
spring.cache.redis.use-key-prefix=false
spring.cache.redis.time-to-live=600000
2、配置序列化器
如果我們沒有配置序列化器,可能顯示的數據是這樣的:
我們需要存儲一個對象,並且能夠很好閱讀,那我們就需要自定義序列化器,將數據以json的方法顯示:
代碼如下:

@Configuration public class RedisConfig extends CachingConfigurerSupport { //配置Redistemplate @Bean public RedisTemplate<String, Object> redisTemplate( RedisConnectionFactory redisConnectionFactory) throws UnknownHostException { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(redisConnectionFactory); // 使用Jackson2JsonRedisSerialize 替換默認序列化 Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); objectMapper.activateDefaultTyping(objectMapper.getPolymorphicTypeValidator(),ObjectMapper.DefaultTyping.NON_FINAL); serializer.setObjectMapper(objectMapper); // 設置value的序列化規則和 key的序列化規則 template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(serializer); template.setHashKeySerializer(new StringRedisSerializer()); template.setHashValueSerializer(serializer); template.afterPropertiesSet(); return template; } //使用CacheManager緩存 @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.activateDefaultTyping(om.getPolymorphicTypeValidator(),ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); // 配置序列化(解決亂碼的問題),過期時間30秒 RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig() .entryTtl(Duration.ofSeconds(1800000)) .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer)) .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer)) .disableCachingNullValues(); RedisCacheManager cacheManager = RedisCacheManager.builder(factory) .cacheDefaults(config) .build(); return cacheManager; } }
3、其他
對於Redistemplate來說,每一次使用都要加上opsForValue等這些,我們可以自己編寫一個工具類,用簡單一點的名字來代替這些繁瑣的操作,網上的例子很多,這里不贅述了。