SpringBoot-Redis 框架集成

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

相关文章
相关标签/搜索