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

springboot(spring)整合redis(集群)、細(xì)節(jié)、底層配置講解

這篇具有很好參考價(jià)值的文章主要介紹了springboot(spring)整合redis(集群)、細(xì)節(jié)、底層配置講解。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一.springboot整合redis.

1.引入依賴.

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

? ? ?其實(shí)springboot整合其他主流框架直接在后面加上名稱即可,比如spring-boot-starter-redis,然后就直接可以用,可以直接注入了.
? ? ?主要原因大概就是springboot框架已經(jīng)包含了自動(dòng)注入的功能,對(duì)于每一個(gè)引入的主要jar包(包含starter),都有一個(gè)factory的配置文件,里面配置了jar包的全路徑,有了這個(gè)路徑就可以將這些類處理然后注入到spring工廠中,我們就可以直接使用.

2.添加配置.

#地址
spring.redis.host=192.168.68.2
#端口
spring.redis.port=6379
#超時(shí)時(shí)間
spring.redis.timeout=60000
    

集群的話可以使用以下兩個(gè)配置

 #以下是最關(guān)鍵的兩個(gè)配置,
 #最大的切換連接節(jié)點(diǎn)的數(shù)目,當(dāng)連接某一個(gè)節(jié)點(diǎn)不成功時(shí),會(huì)去連接另一個(gè)節(jié)點(diǎn)
 spring.redis.cluster.max-redirects=1000
 spring.redis.cluster.nodes=192.168.5.111:6380,192.168.5.111:6381,192.168.5.111:6382,192.168.5.111:6383,192.168.5.111:6384,192.168.5.111:6385

3.使用封裝對(duì)象舉例

 @Service
  public class RedisService {
     @Resource
     RedisTemplate<String,String> template;                        

     ValueOperations<String, String> string = template.opsForValue();
     HashOperations<String, Object, Object> hash = template.opsForHash();
     ListOperations<String, String> list = template.opsForList();
     SetOperations<String, String> set = template.opsForSet();
     ZSetOperations<String, String> zset = template.opsForZSet();

    //封裝String類型方法
    public void set(String key,String value){
        string.set(key,value);
    }
    public String get(String key){
        return string.get(key);
    }
    //封裝hash方法
    public void hset(String key,String itemKey,String itemValue){
        hash.put(key,itemKey,itemValue);
     }
     public String hget(String key,String itemKey){
         return (String)hash.get(key,itemKey);
     }
  }
    -----測(cè)試-----
    @org.junit.Test
    public void TestRedisService(){
        redis.set("name","wang");
        redis.hset("hset","韓信","刺客");
        System.out.println(redis.get("name"));
        System.out.println(redis.hget("hset","韓信"));
    }

二.細(xì)節(jié)講解

出現(xiàn)問題,堆外內(nèi)存溢出

當(dāng)我們的項(xiàng)目直接使用以上配置的時(shí)候,對(duì)項(xiàng)目進(jìn)行壓測(cè),可能很快就出現(xiàn)堆外內(nèi)存溢出.
springboot(spring)整合redis(集群)、細(xì)節(jié)、底層配置講解
? ? ?出現(xiàn)這個(gè)問題的原因就是lettuce操作netty的bug,在springboot2.0以后,默認(rèn)使用lettuce作為操作redis的客戶端.它使用netty進(jìn)行網(wǎng)絡(luò)通信,因?yàn)檫@個(gè)bug導(dǎo)致netty堆外內(nèi)存溢出.
? ? ? 假如我們的項(xiàng)目設(shè)置jvm最大內(nèi)存為200m,那么netty如果沒有指定堆外內(nèi)存的話,就會(huì)默認(rèn)使用我們這里的200m作為堆外內(nèi)存的大小.同時(shí)這個(gè)堆外內(nèi)存的使用并不會(huì)得到及時(shí)釋放,將會(huì)不斷增加.所以會(huì)出現(xiàn)堆外內(nèi)存溢出.

解決方案,切換客戶端

這里有兩個(gè)解決方案:

  1. 升級(jí)lettuce客戶端
  2. 切換客戶端為jedis.

因?yàn)榭紤]到升級(jí)版本可能會(huì)帶來其他的兼容問題,這里選擇一種比較簡(jiǎn)單的方式,切換客戶端為jedis.

切換方式:
直接修改pom即可,其他代碼,配置都不用改.

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>io.lettuce</groupId>
                    <artifactId>lettuce-core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
        </dependency>

三.補(bǔ)充原理.

??????我們直接將操作redis的客戶端由lettuce切換成jedis,但是使用的時(shí)候卻不用做任何修改操作,
可以說非常方便,這是為什么呢?

??????無論是lettuce還是jedis,都是操作redis的底層客戶端, spring都對(duì)其進(jìn)行了統(tǒng)一的封裝,也就是封裝成restTemplate. 從配置層面就可以看到這個(gè)關(guān)系.

??????那怎么看底層的注入配置呢?其實(shí)springboot整合很多其他第三方組件,Redis,Mybatis,Elasticsearch等等都會(huì)有一個(gè)XXXAutoConifguration的配置類.直接搜索這個(gè)配置類即可.
springboot(spring)整合redis(集群)、細(xì)節(jié)、底層配置講解
springboot(spring)整合redis(集群)、細(xì)節(jié)、底層配置講解

這里我們主要看RedisAutoConfiguration.

springboot(spring)整合redis(集群)、細(xì)節(jié)、底層配置講解

而在對(duì)應(yīng)的LettuceConnectionConfiguration和JedisConnectionConfiguration配置類中,都會(huì)向spring注入RedisConnectionFactory這個(gè)bean(在spring缺失這個(gè)bean的條件下)

springboot(spring)整合redis(集群)、細(xì)節(jié)、底層配置講解
springboot(spring)整合redis(集群)、細(xì)節(jié)、底層配置講解

??????這樣,即使底層切換了客戶端,在使用層面也不需要做任何修改.是非常方便的.

??????其實(shí)想一想如果我們自己去實(shí)現(xiàn)這個(gè)功能,你很有可能直接一套if else,沒有jedis的話用lettuce,將來再新增一個(gè)其他的客戶端,又增加個(gè)if else,這樣是非常不美觀,且不具有擴(kuò)展性的,所以我們最重要的還是要學(xué)習(xí)這種思想,運(yùn)用到我們自己的實(shí)際工作中.

今天的分享就到這里了,有問題可以在評(píng)論區(qū)留言,均會(huì)及時(shí)回復(fù)呀.
我是bling,未來不會(huì)太差,只要我們不要太懶就行, 咱們下期見.
springboot(spring)整合redis(集群)、細(xì)節(jié)、底層配置講解文章來源地址http://www.zghlxwxcb.cn/news/detail-490360.html

到了這里,關(guān)于springboot(spring)整合redis(集群)、細(xì)節(jié)、底層配置講解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(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)文章

  • 【微服務(wù)】springboot整合redis哨兵集群使用詳解

    目錄 一、前言 二、環(huán)境準(zhǔn)備 三、安裝redis 3.1 前置準(zhǔn)備 3.1.1?下載安裝包

    2024年02月14日
    瀏覽(19)
  • Redis底層封裝細(xì)節(jié)

    日常我們程序員在使用redis做緩存的時(shí)候,很少會(huì)直接使用到RedisTemplate直接操作k-v鍵值對(duì),而是通過對(duì)RedisTemplate原生代碼的封裝,來構(gòu)建我們?nèi)粘1阌谑褂昧?xí)慣的代碼來操作數(shù)據(jù),這里我分享一下日?;镜膶?duì)RedisTemplate底層的封裝原理和使用方法 以上是我日常使用過程中對(duì)

    2024年02月16日
    瀏覽(16)
  • Redis(發(fā)布訂閱、事務(wù)、redis整合springboot、集成 Spring Cache)

    Redis(發(fā)布訂閱、事務(wù)、redis整合springboot、集成 Spring Cache)

    目錄 一.redis的發(fā)布訂閱 1、什么 是發(fā)布和訂閱 2、Redis的發(fā)布和訂閱 3、發(fā)布訂閱的代碼實(shí)現(xiàn) 二.Redis事務(wù) 1.事務(wù)簡(jiǎn)介 1、在事務(wù)執(zhí)行之前 如果監(jiān)聽的key的值有變化就不能執(zhí)行 2、在事務(wù)執(zhí)行之前 如果監(jiān)聽的key的值沒有變化就能執(zhí)行 3、Exec之前就出現(xiàn)錯(cuò)誤 4、Exec之后出現(xiàn)的錯(cuò)誤

    2024年01月24日
    瀏覽(18)
  • 【Spring】SpringBoot整合Redis,用Redis實(shí)現(xiàn)限流(附Redis解壓包)

    【Spring】SpringBoot整合Redis,用Redis實(shí)現(xiàn)限流(附Redis解壓包)

    ? ???個(gè)人主頁:哈__ 期待您的關(guān)注? 本文介紹SpringBoot整合Redis并且進(jìn)行接口的限流,文章主要介紹的是一種思想,具體代碼還要結(jié)合實(shí)際。 Redis的解壓包我放在了百度網(wǎng)盤上,有需要的可以下載。 Redis-x64-3.0.504 解壓碼:uhwj 我們?cè)诒镜亟鈮合螺d的Redis壓縮包,打開解壓后的

    2024年04月09日
    瀏覽(22)
  • Springboot 整合 Redis配置

    RedisService接口 RedisServiceImpl 實(shí)現(xiàn)類 Redis 配置類

    2024年02月10日
    瀏覽(15)
  • springboot整合redis配置

    2024年02月11日
    瀏覽(22)
  • SpringBoot整合redis的配置

    第一步,引入依賴。 第二步,配置文件中新增redis的配置項(xiàng) yml properties 第三步,新增redis配置類 @EnableCaching 作用:開啟緩存 @AutoConfigureAfter 作用:在加載配置的類之后再加載當(dāng)前類

    2024年02月15日
    瀏覽(18)
  • 【手撕Spring源碼】一些值得注意的Spring底層細(xì)節(jié)

    【手撕Spring源碼】一些值得注意的Spring底層細(xì)節(jié)

    FactoryBean是一個(gè)Factory對(duì)象,用于生成其他bean示例。當(dāng)一個(gè)bean實(shí)現(xiàn)FactoryBean接口后,Spring容器調(diào)用其getObject方法返回該工廠所生成的bean,而不是該FactoryBean本身。但是工廠生成的產(chǎn)品對(duì)象只能說是一部分受到Spring容器的管理,我們來看看下面的例子: 我們把一個(gè)Bean1通過工廠Bean的

    2024年02月09日
    瀏覽(25)
  • springboot中redis的配置詳細(xì)講解

    在Spring Boot中配置Redis主要涉及以下幾個(gè)方面:引入依賴、配置連接信息、配置連接池、配置操作模板。 引入依賴:首先,在項(xiàng)目的pom.xml文件中添加Redis相關(guān)的依賴,例如: 配置連接信息:在application.properties或application.yml文件中配置Redis連接信息,包括主機(jī)名、端口號(hào)、密碼

    2024年01月24日
    瀏覽(24)
  • 【Java Web】利用Spring整合Redis,配置RedisTemplate

    1. 在config中加入RedisConfig配置類 2. 寫個(gè)測(cè)試類測(cè)試一下 3. 注意事項(xiàng) Redis不滿足事務(wù)的原子性,原子性是指事務(wù)要么被全部執(zhí)行,要么都不執(zhí)行。但是Redis不支持回滾,就可能會(huì)出現(xiàn)有些語句執(zhí)行成功,有些執(zhí)行失敗,因此具備原子性; Redis事務(wù)的三個(gè)階段: 開始事務(wù) 命令入

    2024年02月09日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包