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數據庫

相關文章
相關標籤/搜索