SpringBoot集成Redis流程詳解
第一步,導(dǎo)入jar包
<!--Redis--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!--Redis-->
第二步,編寫(xiě)配置類
這是一個(gè)使用FastJson序列化器,配置RedisTemplate的Spring Bean的Java類。該類使用了@Configuration注釋來(lái)標(biāo)識(shí)這是一個(gè)配置類,并使用@Bean注釋來(lái)標(biāo)識(shí)該方法是創(chuàng)建一個(gè)Bean的工廠方法。該方法名為redisTemplate,并使用了@ConditionalOnMissingBean注釋,表示如果在上下文中沒(méi)有StringRedisTemplate類型的Bean,則會(huì)自動(dòng)創(chuàng)建一個(gè)該類型的Bean。該方法返回一個(gè)RedisTemplate類型的對(duì)象,該對(duì)象被配置為使用FastJson序列化器,以便將對(duì)象序列化為JSON格式進(jìn)行存儲(chǔ)和檢索。在方法內(nèi)部,通過(guò)setConnectionFactory方法設(shè)置了RedisTemplate的連接工廠,并通過(guò)setKeySerializer和setValueSerializer方法設(shè)置了鍵和值的序列化器。此外,該類還提供了一個(gè)名為stringRedisTemplate的方法,用于創(chuàng)建StringRedisTemplate類型的Bean。
import com.alibaba.fastjson.support.spring.FastJsonRedisSerializer; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.serializer.StringRedisSerializer; @Configuration public class RedisConfig { /** * 重寫(xiě)Redis序列化方式,使用Json方式: * 當(dāng)我們的數(shù)據(jù)存儲(chǔ)到Redis的時(shí)候,我們的鍵(key)和值(value) * 都是通過(guò)Spring提供的Serializer序列化到數(shù)據(jù)庫(kù)的。RedisTemplate默認(rèn)使用的是JdkSerializationRedisSerializer, * StringRedisTemplate默認(rèn)使用的是StringRedisSerializer。 * Spring Data JPA為我們提供了下面的Serializer: * GenericToStringSerializer、Jackson2JsonRedisSerializer、JacksonJsonRedisSerializer、 * JdkSerializationRedisSerializer、OxmSerializer、StringRedisSerializer。 * 在此我們將自己配置RedisTemplate并定義Serializer。 * * @param redisConnectionFactory * @return */ @Bean("getRedisTemplate") public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); /** * 配置連接工廠 */ redisTemplate.setConnectionFactory(redisConnectionFactory); /** * 使用FJackson2JsonRedisSerializer序列化工具 */ FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer(Object.class); ObjectMapper objectMapper = new ObjectMapper(); /** * 指定要序列化的域Field、set、get,以及修飾符范圍 * ANY是都有,包括private、public */ objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); /** * 指定序列化輸入的類型,類必須是非final修飾的, * final修飾的類,比如 * public final class User implements Serializable{},會(huì)包異常 */ objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY); /** *設(shè)置鍵(key)的序列化采用StringRedisSerializer。 */ redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setHashKeySerializer(new StringRedisSerializer()); /** * 設(shè)置值(value)的序列化采用jackson2JsonRedisSerializer。 */ redisTemplate.setValueSerializer(fastJsonRedisSerializer); redisTemplate.setHashValueSerializer(fastJsonRedisSerializer); redisTemplate.afterPropertiesSet(); return redisTemplate; } /** * 配置stringRedisTemplate序列化方式 * * @param redisConnectionFactory * @return */ @Bean @ConditionalOnMissingBean(StringRedisTemplate.class) public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) { StringRedisTemplate template = new StringRedisTemplate(); template.setConnectionFactory(redisConnectionFactory); return template; } }
第三步,編寫(xiě)util類
這段代碼是一個(gè)基于Spring框架和Redis實(shí)現(xiàn)的工具類,封裝了一些常見(jiàn)的操作方法。它依賴于另一個(gè)Redis配置類,通過(guò)@Autowired注解和@Qualifier注解來(lái)獲取到RedisTemplate實(shí)例,從而進(jìn)行操作。
具體的操作方法有:
- set:設(shè)置鍵值對(duì),將value存儲(chǔ)到key中。
- set:設(shè)置鍵值對(duì)并指定過(guò)期時(shí)間,將value存儲(chǔ)到key中,并設(shè)置過(guò)期時(shí)間。
- remove:刪除一個(gè)或多個(gè)key對(duì)應(yīng)的值。
- exists:判斷指定的key是否存在于緩存中。
- get:獲取指定key對(duì)應(yīng)的值。
需要注意的是,get方法返回的是一個(gè)經(jīng)過(guò)JSON序列化的字符串,而不是原始的對(duì)象。如果要使用對(duì)象,需要在調(diào)用get方法之后進(jìn)行反序列化。
package com.wangfugui.apprentice.common.util; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.ValueOperations; import org.springframework.stereotype.Component; import java.io.Serializable; import java.util.concurrent.TimeUnit; /** * RedisUtils:redis工具類 */ @Component public class RedisUtils { @Autowired @Qualifier("getRedisTemplate") private RedisTemplate redisTemplate; /** * 設(shè)置鍵值 * * @Param: [key, value] * @return: boolean * @Author: MaSiyi * @Date: 2021/11/20 */ public boolean set(final String key, Object value) { boolean result = false; try { ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue(); operations.set(key, value); result = true; } catch (Exception e) { e.printStackTrace(); } return result; } /** * 寫(xiě)入緩存設(shè)置失效時(shí)間 * * @param key * @param value * @return */ public boolean set(final String key, Object value, Long expireTime) { boolean result = false; try { ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue(); operations.set(key, value); redisTemplate.expire(key, expireTime, TimeUnit.SECONDS); result = true; } catch (Exception e) { e.printStackTrace(); } return result; } /** * 批量刪除對(duì)應(yīng)的value */ public void remove(final String... keys) { for (String key : keys) { remove(key); } } /** * 刪除對(duì)應(yīng)的value */ public void remove(final String key) { if (exists(key)) { redisTemplate.delete(key); } } /** * 判斷緩存當(dāng)中是否有對(duì)應(yīng)的value * * @param key * @return */ public boolean exists(final String key) { return redisTemplate.hasKey(key); } /** * 根據(jù)key,獲取到對(duì)應(yīng)的value值 * * @param key * key-value對(duì)應(yīng)的key * @return 該key對(duì)應(yīng)的值。 * 注: 若key不存在, 則返回null。 * * @date 2020/3/8 16:27:41 */ public String get(String key) { return JSONObject.toJSONString(redisTemplate.opsForValue().get(key)); } }
第四步,配置yml
這是一個(gè)YAML格式的Spring Boot配置文件,配置了Redis數(shù)據(jù)庫(kù)的連接信息,包括:
- database: Redis數(shù)據(jù)庫(kù)的編號(hào),默認(rèn)為0。
- host: Redis服務(wù)器的IP地址。
- port: Redis服務(wù)器的端口號(hào)。
這些配置信息會(huì)被Spring Boot自動(dòng)加載并注入到對(duì)應(yīng)的Bean中,可以在代碼中使用這些Bean來(lái)連接和操作Redis數(shù)據(jù)庫(kù)。
spring: redis: database: 0 host: 127.0.0.1 port: 6379
好了,就是這么的簡(jiǎn)單,完整代碼請(qǐng)移至SpringBoot+Redis查看
以上就是SpringBoot集成Redis流程詳解的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot集成Redis的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android開(kāi)發(fā)中Socket通信的基本實(shí)現(xiàn)方法講解
這篇文章主要介紹了Android開(kāi)發(fā)中Socket通信的基本實(shí)現(xiàn)方法講解,是安卓上移動(dòng)互聯(lián)網(wǎng)程序開(kāi)發(fā)的基礎(chǔ),需要的朋友可以參考下2015-12-12使用Spring Boot搭建Java web項(xiàng)目及開(kāi)發(fā)過(guò)程圖文詳解
這篇文章主要介紹了使用Spring Boot搭建Java web項(xiàng)目及開(kāi)發(fā)過(guò)程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06Spring?Boot監(jiān)控SQL運(yùn)行情況的全過(guò)程
這篇文章主要給大家介紹了關(guān)于Spring?Boot監(jiān)控SQL運(yùn)行情況的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用SpringBoot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-02-02Springboot+Vue+axios實(shí)現(xiàn)文章收藏功能
這篇文章主要為大家詳細(xì)介紹了Springboot+Vue+axios實(shí)現(xiàn)文章收藏功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08淺談Spring裝配Bean之組件掃描和自動(dòng)裝配
本篇文章主要介紹了淺談Spring裝配Bean之組件掃描和自動(dòng)裝配,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10