SpringBoot 做爲極速開發框架,固然緩存也是少不了的:html
1, 引入Maven倉庫jar包:java
<dependency><!-- redis緩存處理 --> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
2, 在YML中進行配置:git
spring: # Redis緩存 redis: # 是否開啓緩存 open: true # Redis數據庫索引(默認爲0) database: 0 # Redis服務器地址 host: localhost # Redis服務器鏈接端口 port: 6379 # 密碼(默認爲空) password: # 鏈接超時時長(毫秒) timeout: 6000 # 鏈接池 pool: # 最大鏈接數量 max-active: 1000 # 最大阻塞等待時間(負數爲沒有限制) max-wait: -1 # 最大空閒鏈接 max-idle: 8 # 最小空閒鏈接 min-idle: 5
3,編寫配置類,SpringBoot會對YAML中Redis的自動裝配,因此咱們只須要聲明該緩存:redis
package com.gy.demo.config.redis; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; 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.StringRedisSerializer; /** * Description: Redis緩存配置 * --------------------------------------------------------------------------- * 註解使用: * 1, @Cacheable 代表Spring在調用方法以前首先應該查找方法的返回值. * 若是這個值能找到,就會返回緩存的值.不然,就會調用該方法,將返回值放入緩存中; * 2, @CachePut 代表Spring應該將方法的返還值放到緩存中,在方法調用前並不會檢查緩存, * 方法始終都會調用; * 3, @CacheEvict 代表Spring應該在緩存中清除一個或多個緩存; * 4, @Caching 這是一個分組的註解,可以同時應用多個其餘的緩存註解; * --------------------------------------------------------------------------- * @author geYang * @since 2017/12/20 **/ @Configuration @EnableCaching public class RedisConfig { private Logger logger = LoggerFactory.getLogger(RedisConfig.class); /** * 申明緩存管理器,會建立一個切面(aspect)並觸發Spring緩存註解的切點(pointcut) * 根據類或者方法所使用的註解以及緩存的狀態,這個切面會從緩存中獲取數據, * 將數據添加到緩存之中或者從緩存中移除某個值 * */ @Bean public RedisCacheManager cacheManager(RedisTemplate redisTemplate) { logger.info("Redis: 申明緩存管理器"); return new RedisCacheManager(redisTemplate); } /** * Key 和 Value 序列化 * 當保存一條數據的時候,key和value都要被序列化成json數據,取出來的時候被序列化成對象, * key和value都會使用序列化器進行序列化,spring data redis提供多個序列化器: * 1,GenericToStringSerializer:使用Spring轉換服務進行序列化; * 2,JacksonJsonRedisSerializer:使用Jackson 1,將對象序列化爲JSON; * 3,Jackson2JsonRedisSerializer:使用Jackson 2,將對象序列化爲JSON; * 4,JdkSerializationRedisSerializer:使用Java序列化; * 5,OxmSerializer:使用Spring O/X映射的編排器和解排器(marshaler和unmarshaler)實現序列化,用於XML序列化; * 6,StringRedisSerializer:序列化String類型的key和value; * */ @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { logger.info("Redis: 開啓緩存序列化"); // 建立一個模板類 RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); // 將剛纔的redis鏈接工廠設置到模板類中 redisTemplate.setConnectionFactory(redisConnectionFactory); /* * 假設當使用RedisTemplate的時候,咱們但願將Product類型的value序列化爲JSON,而key是String類型. * RedisTemplate的setKeySerializer()和setValueSerializer()方法就須要以下所示: * */ // 設置key的序列化器 redisTemplate.setKeySerializer(new StringRedisSerializer()); // 設置value的序列化器 redisTemplate.setValueSerializer(jackson2Json()); return redisTemplate; } /** * 使用 Jackson2 將對象序列化爲JSON * */ private Jackson2JsonRedisSerializer<Object> jackson2Json(){ Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class); // JSON 轉對象類,不設置默認的會將 JSON 轉成 HashMap ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(objectMapper); return jackson2JsonRedisSerializer; } }
SpringBoot 官方文檔: https://docs.spring.io/spring-boot/docs/current/reference/html/spring
項目源碼: https://gitee.com/ge.yang/SpringBoot數據庫