亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Springboot整合redis如何配置

發布時間:2022-03-29 14:26:13 來源:億速云 閱讀:1023 作者:iii 欄目:大數據

本文小編為大家詳細介紹“Springboot整合redis如何配置”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Springboot整合redis如何配置”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

Springboot整合redis配置詳解

1.導入依賴

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2.編寫properties或者yml配置

#Redis本地服務器地址,注意要開啟redis服務,即那個redis-server.exe
spring.redis.host=127.0.0.1
#Redis服務器端口,默認為6379.若有改動按改動后的來
spring.redis.port=6379
#Redis服務器連接密碼,默認為空,若有設置按設置的來
spring.redis.password=
#連接池最大連接數,若為負責則表示沒有任何限制
spring.redis.jedis.pool.max-active=8
#連接池最大阻塞等待時間,若為負責則表示沒有任何限制
spring.redis.jedis.pool.max-wait=-1
#連接池中的最大空閑連接
spring.redis.jedis.pool.max-idle=8
spring:
  redis:
    # Redis本地服務器地址,注意要開啟redis服務,即那個redis-server.exe
    host: 127.0.0.1
    # Redis服務器端口,默認為6379.若有改動按改動后的來
    port: 6379
    #Redis服務器連接密碼,默認為空,若有設置按設置的來
    password:
    jedis:
      pool:
        # 連接池最大連接數,若為負數則表示沒有任何限制
        max-active: 8
        # 連接池最大阻塞等待時間,若為負數則表示沒有任何限制
        max-wait: -1
        # 連接池中的最大空閑連接
        max-idle: 8

3.根據需要選擇Redis模板

  • Redis模板分為兩種,一種為RedisTemplate,一種為StringRedisTemplate

  • 如何選擇取決于我們的redis存儲的數據類型的需求

    • RedisTemplate

    • StringRedisTemplate

    • 該模板是一個泛型類,故而該類可以對任意類型的key和value做操作

    • 該模板的序列化方式為使用JdkSerializationRedisSerializer類得到一個字節數組,反序列化得到的是一個Object類型的數據

    • 該類繼承了RedisTemplate

      public class StringRedisTemplate extends RedisTemplate<String, String>
    • 因為該類的泛型都設定為String,所以該類只能對key和value都是String類型的數據進行操作

    • 首先我們先來講兩種模板的區別

    • 知道了兩種模板的區別后,我們就好選擇了,如果我們需要的是對對象等實體類型或者除String外的基本數據類型的數據進行操作時,那么我們就選擇RedisTemplate,如果對String類型的自然就使用StringRedisTemplate,我們當然也可以使用RedisTemplate操作如int之類的基本數據類型,只是需要在反序列化時應使用String類型接收即可,一切以具體需求為準。

4.模板的配置和解釋

  • 因為著重講配置,所以SpringRedisTemplate和工具類這里不做描述

  • 自定義配置類

package cn.wenhe9.config;

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
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.RedisSerializationContext;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

import java.time.Duration;

@Configuration
public class RedisConfig extends CachingConfigurerSupport {
	/**
     *  自定義RedisTemplate
     * @param redisConnectionFactory
     * @return
     */
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
    	//大多數情況,都是選用<String, Object>
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);

        // 使用JSON的序列化對象,對數據key和value進行序列化轉換
        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
        //ObjectMapper是Jackson的一個工作類,顧名思義他的作用是將JSON映射到Java對象即反序列化,或將Java對象映射到JSON即序列化
        ObjectMapper mapper = new ObjectMapper();
        // 設置序列化時的可見性,第一個參數是選擇序列化哪些屬性,比如時序列化setter?還是filed?h第二個參數是選擇哪些修飾符權限的屬性來序列化,比如private或者public,這里的any是指對所有權限修飾的屬性都可見(可序列化)
        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        // 設置出現故障即錯誤的類型,第一個是指驗證程序,此時的參數為無需驗證,其他參數可以查看源碼了解(作者還在啃源碼中),第二是指該類不能為final修飾,否則將會報錯
        mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);
        jacksonSeial.setObjectMapper(mapper);
        // 設置RedisTemplate模板的序列化方式為jacksonSeial
        template.setDefaultSerializer(jacksonSeial);
        return template;
    }

    /**
     * 自定義緩存管理器
     * @param redisConnectionFactory
     * @return
     */
    @Bean
    public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
        // 創建String和JSON序列化對象,分別對key和value的數據進行類型轉換
        RedisSerializer<String> strSerializer = new StringRedisSerializer();
        
        Jackson2JsonRedisSerializer jacksonSeial = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper mapper = new ObjectMapper();
        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);
        jacksonSeial.setObjectMapper(mapper);
        
        // 自定義緩存數據序列化方式和有效期限
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
                .entryTtl(Duration.ofDays(1))   // 設置緩存有效期為1天
                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(strSerializer)) // 使用strSerializer對key進行數據類型轉換
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jacksonSeial)) // 使用jacksonSeial對value的數據類型進行轉換
                .disableCachingNullValues();   // 對空數據不操作
                
        RedisCacheManager cacheManager = RedisCacheManager.builder(redisConnectionFactory).cacheDefaults(config).build();
        return cacheManager;
    }
}

讀到這里,這篇“Springboot整合redis如何配置”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

漳浦县| 贵州省| 贞丰县| 虎林市| 饶河县| 宜川县| 湛江市| 德化县| 庆阳市| 泗洪县| 邻水| 广西| 扎鲁特旗| 石柱| 长春市| 义马市| 定日县| 离岛区| 丰镇市| 穆棱市| 遂昌县| 和龙市| 杭锦后旗| 正定县| 沧州市| 运城市| 新沂市| 宝坻区| 若尔盖县| 东平县| 左云县| 华蓥市| 乐亭县| 龙口市| 萨嘎县| 枣庄市| 泾源县| 樟树市| 理塘县| 黎城县| 抚顺市|