您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“Springboot整合redis如何配置”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Springboot整合redis如何配置”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
#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
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類型接收即可,一切以具體需求為準。
因為著重講配置,所以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如何配置”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。