国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【SpringBoot3】Spring Boot 3.0 集成 Redis 緩存

這篇具有很好參考價(jià)值的文章主要介紹了【SpringBoot3】Spring Boot 3.0 集成 Redis 緩存。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、什么是redis緩存

Redis緩存是一個(gè)開(kāi)源的使用ANSIC語(yǔ)言編寫(xiě)、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫(kù),并提供多種語(yǔ)言的API。它主要用于作為數(shù)據(jù)庫(kù)、緩存和消息中間件,以快速讀寫(xiě)和豐富的數(shù)據(jù)結(jié)構(gòu)支持而著稱。

在應(yīng)用程序和數(shù)據(jù)庫(kù)之間,Redis緩存作為一個(gè)中間層起著關(guān)鍵作用。通過(guò)將常用的數(shù)據(jù)存儲(chǔ)在Redis內(nèi)存中,可以快速讀取,從而避免了從數(shù)據(jù)庫(kù)進(jìn)行復(fù)雜的查詢操作,減輕了數(shù)據(jù)庫(kù)服務(wù)器的壓力,并提高了應(yīng)用程序的性能和響應(yīng)速度。

此外,為了優(yōu)化熱門(mén)查詢的性能,可以確定希望緩存的查詢結(jié)果,特別是最常用和最耗時(shí)的查詢。這樣可以進(jìn)一步提高應(yīng)用程序的性能和吞吐量。

spring-boot-starter-data-redis默認(rèn)的Redis客戶端是Lettuce。這是因?yàn)長(zhǎng)ettuce是一個(gè)線程安全的、基于Netty通信的Redis客戶端,相比之下,Jedis在多線程環(huán)境下存在線程安全問(wèn)題,因此需要增加連接池來(lái)解決線程安全的問(wèn)題,同時(shí)可以限制redis客戶端的數(shù)量。

而Lettuce在多線程環(huán)境下不存在線程安全問(wèn)題,一個(gè)連接實(shí)例就可以滿足多線程環(huán)境下的并發(fā)訪問(wèn),當(dāng)然實(shí)例不夠的情況下也可以按需增加實(shí)例,保證伸縮性。因此,Spring Boot在后續(xù)版本中選擇了Lettuce作為默認(rèn)的Redis客戶端。

二、SpringBoot3 如何集成 Redis

1)添加依賴

在pom.xml文件中添加Spring Boot Starter Data Redis依賴:

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

2)配置Redis連接

在application.properties或application.yml文件中配置Redis連接信息:

spring.data.redis.host=127.0.0.1
spring.data.redis.port=6379
spring.data.redis.database=0
spring.data.redis.password=

3)配置 RedisTemplate Bean

@Configuration  
public class RedisConfig {  
	@Bean
	public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
		RedisTemplate<Object, Object> template = new RedisTemplate<>();
		template.setConnectionFactory(connectionFactory);
		// 使用Jackson2JsonRedisSerializer來(lái)序列化和反序列化redis的value值(默認(rèn)使用JDK的序列化方式)
		Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class);
		template.setValueSerializer(serializer);
		template.setKeySerializer(new StringRedisSerializer());
		template.setHashKeySerializer(new StringRedisSerializer());
		template.setHashValueSerializer(serializer);
		return template;
	}
}

4)使用示例

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;

@SpringBootTest
public class RedisTemplateTest {
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    @Test
    void test() {
        redisTemplate.opsForValue().set("key_name", "my name is Jacky");
        System.out.println("緩存設(shè)置成功");
        String value = (String) redisTemplate.opsForValue().get("key_name");
        System.out.println(value);
    }
}

三、spring-boot-starter-cache 結(jié)合 Redis 使用

1、什么是 spring-boot-starter-cache

Spring Boot Starter Cache 是 Spring Boot 體系內(nèi)提供使用 Spring Cache 的 Starter 包。它可以為你的 Spring Boot 應(yīng)用提供緩存支持,簡(jiǎn)化和自動(dòng)化緩存的配置和識(shí)別。通過(guò)使用 Spring Cache 的抽象層,開(kāi)發(fā)者可以輕松地使用各種緩存解決方案。

Spring Boot Starter Cache 集成了各種主流緩存實(shí)現(xiàn)(ConcurrentMap、redis、ehcacheCaffeine等)

Spring Boot Starter Cache 默認(rèn)使用ConcurrentMap作為緩存;如果工程中引入了redis配置,則會(huì)使用redis作為緩存

Spring Boot Starter Cache 通過(guò)CacheManager判斷具體使用哪個(gè)緩存,每個(gè)緩存都有一個(gè)具體的CacheManager(比如:EhCacheCacheManager,RedisCacheManager,CaffeineCacheManager),如果沒(méi)有配置任何的CacheManager,則會(huì)使用ConcurrentMap作為緩存

常用注解說(shuō)明:

名稱 說(shuō)明
@EnableCaching 開(kāi)啟基于注解的緩存
@CacheConfig 統(tǒng)一配置本類(lèi)的緩存注解的屬性
@Cacheable 常用于查詢方法,能夠根據(jù)方法的請(qǐng)求參數(shù)對(duì)其進(jìn)行緩存
@CachePut 常用于更新/保存方法,會(huì)將方法返回值放入緩存
@CacheEvict 清空緩存

2、Redis 集成步驟

下面是如何在 Spring Boot 應(yīng)用中使用 spring-boot-starter-cache 與 Redis 進(jìn)行集成的步驟:

  1. 添加依賴:
    在你的 pom.xml 文件中添加 spring-boot-starter-cachespring-boot-starter-data-redis 的依賴。
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
  1. 配置 Redis:
    application.propertiesapplication.yml 文件中配置 Redis 連接信息。

  2. 啟用緩存支持:
    在你的 Spring Boot 主類(lèi)或配置類(lèi)上添加 @EnableCaching 注解以啟用緩存支持。

  3. 定義緩存配置:
    你可以創(chuàng)建一個(gè)配置類(lèi)并實(shí)現(xiàn) CacheManagerCustomizer 接口來(lái)自定義緩存配置?;蛘?,你可以使用 @EnableCaching 注解并使用屬性來(lái)定義緩存配置。

    CacheManagerCustomizer是一個(gè)Spring框架的接口,它允許用戶自定義擴(kuò)展CacheManager。

    當(dāng)需要對(duì)某個(gè)CacheManager實(shí)現(xiàn)進(jìn)行一些自定義時(shí),可以實(shí)現(xiàn)CacheManagerCustomizer接口,指定泛型為需要進(jìn)行自定義的CacheManager實(shí)現(xiàn)類(lèi),然后把它定義為一個(gè)Spring bean。通過(guò)實(shí)現(xiàn)這個(gè)接口,你可以對(duì)Spring的CacheManager進(jìn)行自定義擴(kuò)展,例如配置緩存策略、設(shè)置緩存過(guò)期時(shí)間等。

    這個(gè)接口的使用可以幫助開(kāi)發(fā)者更好地控制和優(yōu)化緩存的行為,提高應(yīng)用程序的性能和響應(yīng)速度。在實(shí)現(xiàn)自定義擴(kuò)展時(shí),可以使用Spring的注解或XML配置來(lái)定義自定義邏輯,并根據(jù)需要選擇是否將自定義的邏輯應(yīng)用到所有CacheManager實(shí)現(xiàn)上,或者只應(yīng)用到特定的CacheManager實(shí)現(xiàn)上。

@Configuration  
public class CacheConfig {  
    @Bean  
    public CacheManagerCustomizer cacheManagerCustomizer() {  
        return (cacheManager) -> {  
            SimpleKeyGenerator keyGenerator = new SimpleKeyGenerator();  
            keyGenerator.setSalt("some_salt"); //設(shè)置鹽值,增強(qiáng)安全性  
            cacheManager.getCache("my_cache").setKeyGenerator(keyGenerator); //設(shè)置key生成策略  
        };  
    }  
}
  1. 使用緩存注解:
    在你的服務(wù)類(lèi)中的方法上使用 Spring 的緩存注解,例如 @Cacheable, @CacheEvict, @CachePut 等。這樣,當(dāng)這些方法被調(diào)用時(shí),它們將與 Redis 緩存進(jìn)行交互。
  2. 自定義序列化:
    如果你需要自定義序列化,你可以創(chuàng)建一個(gè)配置類(lèi)并實(shí)現(xiàn) RedisSerializer 接口。然后,你可以在 Redis 的相關(guān)配置中指定這個(gè)序列化器。
private Jackson2JsonRedisSerializer<Object> jacksonSerializer() {
    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.setVisibility(PropertyAccessor.ALL, Visibility.ANY);
    objectMapper.activateDefaultTyping(objectMapper.getPolymorphicTypeValidator(), ObjectMapper.DefaultTyping.NON_FINAL);
    return new Jackson2JsonRedisSerializer<>(objectMapper,Object.class);
}

3、使用示例

1、創(chuàng)建測(cè)試Service

@Service
public class MyService {
    @Cacheable(value = "my_cache") //將方法結(jié)果緩存到"my_cache"中,key為方法參數(shù)的哈希值
    public String getSomeData(String id) throws InterruptedException {
        // 模擬一個(gè)耗時(shí)操作,比如從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)
        Thread.sleep(1000); //休眠1秒,模擬耗時(shí)操作
        return "data for " + id;
    }
}

2、創(chuàng)建測(cè)試類(lèi)

import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.shi9.module.system.service.MyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.util.StopWatch;

@Slf4j
@SpringBootTest
public class MyServiceTest {
    @Autowired
    private MyService myService;

    @Test
    public void getData() throws Exception {
        StopWatch stopWatch = new StopWatch("getData");
        stopWatch.start("1");
        System.out.println(myService.getSomeData("k"));
        stopWatch.stop();
        stopWatch.start("2");
        System.out.println(myService.getSomeData("k"));
        stopWatch.stop();
        stopWatch.start("3");
        System.out.println(myService.getSomeData("k"));
        stopWatch.stop();
        System.out.println(stopWatch.prettyPrint());
    }

}

執(zhí)行結(jié)果如下:

data for k
data for k
data for k
StopWatch 'getData': 1.3141034 seconds
----------------------------------------
Seconds       %       Task name
----------------------------------------
1.3104986     100%    1
0.0029345     00%     2
0.0006703     00%     3

可以看見(jiàn),只有第一次執(zhí)行耗時(shí),后面兩次直接從緩存讀取,幾乎沒(méi)有耗時(shí)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-833476.html

參考

  • spring-boot-starter-cache
  • spring-boot-starter-redis

到了這里,關(guān)于【SpringBoot3】Spring Boot 3.0 集成 Redis 緩存的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Redis之緩存穿透問(wèn)題解決方案實(shí)踐SpringBoot3+Docker

    Redis之緩存穿透問(wèn)題解決方案實(shí)踐SpringBoot3+Docker

    當(dāng)一種請(qǐng)求,總是能越過(guò)緩存,調(diào)用數(shù)據(jù)庫(kù),就是緩存穿透。 比如當(dāng)請(qǐng)求一個(gè)數(shù)據(jù)庫(kù)沒(méi)有的數(shù)據(jù),那么緩存也不會(huì)有,然后就一直請(qǐng)求,甚至高并發(fā)去請(qǐng)求,對(duì)數(shù)據(jù)庫(kù)壓力會(huì)增大。 如果 key 具有某種規(guī)則,那么可以對(duì)key增加校驗(yàn)機(jī)制,不符合直接返回。 Redisson 布隆過(guò)濾器 邏

    2024年02月21日
    瀏覽(22)
  • Spring Boot 3.0系列【23】應(yīng)用篇之集成Spring WebFlux

    有道無(wú)術(shù),術(shù)尚可求,有術(shù)無(wú)道,止于術(shù)。 本系列Spring Boot版本3.0.4 源碼地址:https://gitee.com/pearl-organization/study-spring-boot3 官方文檔地址 Spring MVC 是 Spring 專(zhuān)門(mén)為 Servlet API 和 Servlet 容器而設(shè)計(jì)的 Web 框架, 在 5.0 版本中加入了基于響應(yīng)式的 Web 框架 Spring WebFlux ,它是完全 非阻

    2023年04月14日
    瀏覽(25)
  • 【Spring Cloud Gateway】⑥SpringBoot3.x集成SpringDoc指南

    【Spring Cloud Gateway】⑥SpringBoot3.x集成SpringDoc指南

    Spring Cloud Gateway 使用 Netty 作為嵌入式服務(wù)器,并基于響應(yīng)式 Spring WebFlux 。做為微服務(wù)網(wǎng)關(guān),多個(gè)微服務(wù)把 API 掛在 Gateway 上,如果查看某個(gè) API 的 Swagger 還要去各個(gè)子微服務(wù)中去查看,就很不方便,如果能在 Gateway 上直接查看各個(gè)微服務(wù)的 API 文檔,會(huì)方便很多,本文以截至

    2024年02月14日
    瀏覽(23)
  • Spring Boot進(jìn)階(67):高性能緩存!使用Spring Boot輕松集成Memcached。

    Spring Boot進(jìn)階(67):高性能緩存!使用Spring Boot輕松集成Memcached。

    ????????Memcached是一款高性能的分布式內(nèi)存對(duì)象緩存系統(tǒng),主要用于動(dòng)態(tài)Web應(yīng)用中減輕數(shù)據(jù)庫(kù)負(fù)載。Spring Boot是一款基于Spring框架的快速開(kāi)發(fā)框架,集成了大量的常用技術(shù)和組件,方便開(kāi)發(fā)者快速搭建項(xiàng)目。將兩者結(jié)合起來(lái),可以提高Web應(yīng)用的性能,并減少數(shù)據(jù)庫(kù)的壓力。

    2024年02月07日
    瀏覽(30)
  • 【Redis(8)】Spring Boot整合Redis和Guava,解決緩存穿透、緩存擊穿、緩存雪崩等緩存問(wèn)題

    在緩存技術(shù)的挑戰(zhàn)及設(shè)計(jì)方案我們介紹了使用緩存技術(shù)可能會(huì)遇到的一些問(wèn)題,那么如何解決這些問(wèn)題呢? 在構(gòu)建緩存系統(tǒng)時(shí),Spring Boot和Redis的結(jié)合提供了強(qiáng)大的支持,而Guava的 LoadingCache 則為緩存管理帶來(lái)了便捷的解決方案。下面我將介紹如何通過(guò)整合Spring Boot、Redis和Gu

    2024年04月22日
    瀏覽(23)
  • Spring Boot整合Redis的高效數(shù)據(jù)緩存實(shí)踐

    Spring Boot整合Redis的高效數(shù)據(jù)緩存實(shí)踐

    引言 在現(xiàn)代Web應(yīng)用開(kāi)發(fā)中,數(shù)據(jù)緩存是提高系統(tǒng)性能和響應(yīng)速度的關(guān)鍵。Redis作為一種高性能的緩存和數(shù)據(jù)存儲(chǔ)解決方案,被廣泛應(yīng)用于各種場(chǎng)景。本文將研究如何使用Spring Boot整合Redis,通過(guò)這個(gè)強(qiáng)大的緩存工具提高應(yīng)用的性能和可伸縮性。 整合redis,需要先安裝redis Redis?

    2024年01月22日
    瀏覽(93)
  • Spring Boot Security認(rèn)證:Redis緩存用戶信息

    Spring Boot Security認(rèn)證:Redis緩存用戶信息

    ??歡迎來(lái)到架構(gòu)設(shè)計(jì)專(zhuān)欄~Spring Boot Security認(rèn)證:Redis緩存用戶信息 ☆* o(≧▽≦)o *☆嗨~我是IT·陳寒?? ?博客主頁(yè):IT·陳寒的博客 ??該系列文章專(zhuān)欄:架構(gòu)設(shè)計(jì) ??其他專(zhuān)欄:Java學(xué)習(xí)路線 Java面試技巧 Java實(shí)戰(zhàn)項(xiàng)目 AIGC人工智能 數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí) ??文章作者技術(shù)和水平有限,如

    2024年02月04日
    瀏覽(21)
  • 將Spring Boot與Redis集成

    Spring Boot是一個(gè)用于創(chuàng)建獨(dú)立且可執(zhí)行的Spring應(yīng)用程序的框架。它簡(jiǎn)化了基于Spring框架的應(yīng)用程序的開(kāi)發(fā)過(guò)程,并提供了一種快速和簡(jiǎn)便的方式來(lái)構(gòu)建Java應(yīng)用程序。 Spring Boot提供了自動(dòng)配置機(jī)制,通過(guò)引入適當(dāng)?shù)囊蕾図?xiàng),可以自動(dòng)配置各種Spring功能。它還提供了內(nèi)嵌的HTTP服務(wù)

    2024年02月11日
    瀏覽(91)
  • Spring Boot集成Redis簡(jiǎn)單示例

    要在Spring Boot中集成Redis,你可以使用Spring Data Redis庫(kù)來(lái)簡(jiǎn)化操作。 下面是一個(gè)示例代碼: 首先,在你的Spring Boot項(xiàng)目的pom.xml文件中添加以下依賴: 接下來(lái),配置Redis連接信息。在application.properties(或application.yml)文件中添加以下配置: 然后,創(chuàng)建一個(gè)Redis服務(wù)類(lèi)來(lái)執(zhí)行一些

    2024年01月22日
    瀏覽(97)
  • 【Spring Boot 3】【Redis】集成Lettuce

    軟件開(kāi)發(fā)是一門(mén)實(shí)踐性科學(xué),對(duì)大多數(shù)人來(lái)說(shuō),學(xué)習(xí)一種新技術(shù)不是一開(kāi)始就去深究其原理,而是先從做出一個(gè)可工作的DEMO入手。但在我個(gè)人學(xué)習(xí)和工作經(jīng)歷中,每次學(xué)習(xí)新技術(shù)總是要花費(fèi)或多或少的時(shí)間、檢索不止一篇資料才能得出一個(gè)可工作的DEMO,這占用了我大量的時(shí)

    2024年01月18日
    瀏覽(99)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包