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数据库