欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot集成Redis并實(shí)現(xiàn)主從架構(gòu)的實(shí)踐

 更新時(shí)間:2021年12月20日 10:00:02   作者:灰小猿  
本文主要和大家分享一下在springboot中如何集成redis,并實(shí)現(xiàn)主從架構(gòu),進(jìn)行數(shù)據(jù)的簡(jiǎn)單存儲(chǔ),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

今天這篇文章來和大家分享一下在springboot中如何集成redis,并實(shí)現(xiàn)主從架構(gòu),進(jìn)行數(shù)據(jù)的簡(jiǎn)單存儲(chǔ)。

在這里插入圖片描述

我的Redis是部署在Windows系統(tǒng)下面的,所以在這里附上Redis在Windows環(huán)境下的安裝地址和安裝說明。

一、Windows環(huán)境下安裝Redis

首先去官網(wǎng)下載Redis的安裝包,官方下載地址:
https://github.com/tporadowski/redis/releases
在其中選擇當(dāng)前版本即可。


下載之后解壓壓縮包,得到這樣的文件目錄:

打開cmd命令行,切換到該redis的文件目錄下。運(yùn)行:

redis-server.exe redis.windows.conf

輸入之后,顯示這樣的頁面就說明Redis服務(wù)器運(yùn)行成功了!

這個(gè)時(shí)候這個(gè)命令行窗口不要關(guān)閉,一旦關(guān)閉,Redis服務(wù)就停止了!這一點(diǎn)以后在開發(fā)的時(shí)候也是一樣的,需要注意!
現(xiàn)在打開一個(gè)新的cmd窗口,同樣定位到Redis的目錄下,
運(yùn)行如下命令:

redis-cli.exe -h 127.0.0.1 -p 6379

運(yùn)行這個(gè)命令的原因是連接到redis的服務(wù)器,其中的地址為本地地址,6379為redis的默認(rèn)端口號(hào),

設(shè)置鍵值對(duì)

因?yàn)槲覀冎繰edis中數(shù)據(jù)的存儲(chǔ)都是以鍵值對(duì)的形式來到的,所以我們可以以鍵值對(duì)的形式來在Redis中存儲(chǔ)一個(gè)數(shù)據(jù),書寫格式如下

set key value

比如存儲(chǔ)key為Mykey,value為huixiaoyuan的內(nèi)容,則輸入

set Mykey huixiaoyuan

根據(jù)key獲取value

根據(jù)key來獲取value,我們可以直接以get的形式獲取。
如獲取我們剛才設(shè)置的key為Mykey的value值,那么直接:

get Mykey

就可以獲取到對(duì)應(yīng)的value值了,

這樣在Windows環(huán)境下Redis的安裝就算是完成了,以后在使用的過程中記得,Redis的窗口不要關(guān)閉就可以了。

二、SpringBoot連接Redis

springboot連接Redis時(shí)需要在pom文件中導(dǎo)入所需的jar包依賴,依賴如下:

        <!-- 加入jedis依賴 -->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>

(1)使用Jedis類直接連接Redis服務(wù)器

在springboot環(huán)境下連接redis的方法有很多,首先最簡(jiǎn)單的就是直接通過jedis類來連接,

jedis類就相當(dāng)于是redis的客戶端表示。

連接方法如下:

    /**
     * redis連接測(cè)試01
     */
    @Test
    public void redisTest01() {
        //連接本地的 Redis 服務(wù)
        Jedis jedis = new Jedis("localhost");
        // 如果 Redis 服務(wù)設(shè)置了密碼,需要用下面這行代碼輸入密碼
        // jedis.auth("123456"); 
        System.out.println("連接成功");
        //查看服務(wù)是否運(yùn)行
        System.out.println("服務(wù)正在運(yùn)行: "+jedis.ping());
    }

運(yùn)行后結(jié)果:


通過這種方式進(jìn)行連接時(shí),springboot會(huì)自動(dòng)的去本地尋找redis服務(wù)器進(jìn)行連接,如果沒有找到那么就會(huì)報(bào)錯(cuò),

如果你去閱讀jedis的底層源碼,你會(huì)發(fā)現(xiàn)Jedis類有多種構(gòu)造方法,常用的幾個(gè)是:

使用默認(rèn)地址和端口

//不傳值,那么使用默認(rèn)的127.0.0.1地址,6379端口就訪問
public Jedis()

使用指定地址和默認(rèn)端口

//只傳入目的地址,那么使用指定的地址和默認(rèn)的端口號(hào)去訪問
public Jedis(String host)

使用指定地址和端口

//傳入目的地址和端口號(hào),那么使用指定的地址和端口號(hào)去訪問
public Jedis(String host, int port)

(2)通過配置文件進(jìn)行連接

在springboot中,當(dāng)然是可以通過配置文件的形式來設(shè)置各種連接參數(shù)了,Redis也是一樣的,

在yml文件中進(jìn)行如下配置:

注意:這是沒有使用連接池的,如果使用連接池,需要在下邊增加配置,關(guān)于使用連接池的可以繼續(xù)往下看。

##redis配置信息
spring:
  redis:
    database: 0 #redis數(shù)據(jù)庫索引,默認(rèn)為0
    host: 127.0.0.1 #redis服務(wù)器地址
    port: 6379 #redis服務(wù)器連接端口
    password: #redis服務(wù)器連接密碼,默認(rèn)為null
    timeout: 5000 #redis連接超時(shí)時(shí)間

通過配置文件來進(jìn)行配置之后,我們就可以使用springboot中的一個(gè)工具類來操作Redis的操作了,springboot會(huì)自動(dòng)讀取配置文件中的配置信息,然后通過該配置信息去連接Redis服務(wù)器,springboot中提供操作Redis的工具類有兩個(gè),分別是:StringRedisTemplate和RedisTemplate,

StringRedisTemplate和RedisTemplate的區(qū)別如下

  • 在進(jìn)行序列化時(shí),RedisTemplate使用的是 JdkSerializationRedisSerializer,而StringRedisTemplate使用的是StringRedisSerializer
  • StringRedisTemplate繼承了RedisTemplate<String,String>,而RedisTemplate 定義為 RedisTemplate<K, V>,所有StringRedisTemplate就限定了K,V為String類型的

相同處體現(xiàn)在他們對(duì)Redis的操作上,

RedisTemplate和StringRedisSerializer都定義了五種對(duì)Redis的操作,分別對(duì)應(yīng)這Redis中的五種數(shù)據(jù)類型。

redisTemplate.opsForValue();  //操作字符串
redisTemplate.opsForHash();   //操作hash
redisTemplate.opsForList();   //操作list
redisTemplate.opsForSet();    //操作set
redisTemplate.opsForZSet();   //操作有序set

那么在使用的時(shí)候,這兩個(gè)類應(yīng)該如何選擇呢?

如果你的redis數(shù)據(jù)庫里面本來存的是字符串?dāng)?shù)據(jù),或者你要存取的數(shù)據(jù)就是字符串類型數(shù)據(jù)的時(shí)候,那么你就使用StringRedisTemplate即可,

》但是如果你的數(shù)據(jù)是復(fù)雜的對(duì)象類型,而取出的時(shí)候又不想做任何的數(shù)據(jù)轉(zhuǎn)換,直接從Redis里面取出一個(gè)對(duì)象,那么使用RedisTemplate是更好的選擇。

接下來我以StringRedisSerializer為例子,來給大家演示一下使用StringRedisSerializer操作Redis的方法,

    /**
     * springboot主從連接測(cè)試,
     * 使用springRedisTemplate操作
     */
    @Test
    public void redisTest06() {
//        操作字符型
        stringRedisTemplate.opsForValue().set("test06","Test06");
        System.out.println(stringRedisTemplate.opsForValue().get("test06"));

//        設(shè)置key的過期時(shí)間,30秒
        stringRedisTemplate.expire("test06", 30 * 1000, TimeUnit.MILLISECONDS);

//        根據(jù)key獲取過期時(shí)間
        Long test06ExpireTime = stringRedisTemplate.getExpire("test06");
        System.out.println("根據(jù)key獲取過期時(shí)間:" + test06ExpireTime);

//        根據(jù)key獲取過期時(shí)間,并且換算成指定單位
        Long test06ExpireTimeToUnit = stringRedisTemplate.getExpire("test06", TimeUnit.SECONDS);
        System.out.println("根據(jù)key獲取過期時(shí)間,并且換算成指定單位:" + test06ExpireTimeToUnit);

//        檢查key是否存在,返回布爾類型
        Boolean test06IsExist = stringRedisTemplate.hasKey("test06");
        System.out.println("檢查key是否存在,返回布爾類型:" + test06IsExist);

    }

在上面的操作中,有一點(diǎn)關(guān)于獲取和設(shè)置key過期時(shí)間的操作,當(dāng)時(shí)在操作的時(shí)候?qū)ζ溥M(jìn)行了一下探究,在這里分享給大家

stringRedisTemplate中獲取過期時(shí)間的getExpire()方法的說明

  • 如果最開始沒有設(shè)置過期時(shí)間,那么就返回-1,數(shù)據(jù)在沒有達(dá)到Redis數(shù)據(jù)最大限額的情況下會(huì)一直存在.
  • 如果設(shè)置了過期時(shí)間,但是數(shù)據(jù)還未過期,就返回剩余時(shí)間,如果到了過期時(shí)間,那么數(shù)據(jù)會(huì)被刪除
  • 如果數(shù)據(jù)被刪除或者不存在,那么就返回-2.

三、使用連接池操作Redis

和使用mysql數(shù)據(jù)庫一樣,Redis在springboot中也是有連接池的,上面在yml中寫入配置文件的時(shí)候,我有和大家說過可以在yml配置文件中寫入連接池參數(shù),那么配置如下:

##redis配置信息
spring:
  redis:
    database: 0 #redis數(shù)據(jù)庫索引,默認(rèn)為0
    host: 127.0.0.1 #redis服務(wù)器地址
    port: 6379 #redis服務(wù)器連接端口
    password: #redis服務(wù)器連接密碼,默認(rèn)為null
    timeout: 5000 #redis連接超時(shí)時(shí)間
    jedis:
      pool: #連接池配置
        max-active: 8 #連接池最大連接數(shù)
        max-wait: -1 #連接池最大阻塞等待時(shí)間
        max-idle: 8 #連接池中的最大空閑連接數(shù)
        min-idle: 0 #連接池中的最小空閑連接數(shù)

使用連接池時(shí)還有一種不需要寫入配置文件的方法,使用這種方法就需要在構(gòu)造函數(shù)中傳入?yún)?shù)。
并且將配置信息寫入到配置類中,

當(dāng)然,在進(jìn)行實(shí)際的項(xiàng)目開發(fā)的時(shí)候,還是將配置信息寫入到配置文件中會(huì)好一點(diǎn)。

    /**
     * redis連接測(cè)試01
     * 建立簡(jiǎn)單主從架構(gòu)
     */
    @Test
    public void redisTest02() {
//        配置redis連接池
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
//        在指定時(shí)刻通過連接池能夠獲取到的最大的jedis的數(shù)量
        jedisPoolConfig.setMaxTotal(20);
//        最大空閑jedis的數(shù)量
        jedisPoolConfig.setMaxIdle(10);
//        最小空閑jedis的數(shù)量
        jedisPoolConfig.setMinIdle(5);

//        建立redis連接池,設(shè)置本地地址,端口號(hào),連接超時(shí)時(shí)間和讀寫超時(shí)時(shí)間,如果沒有連接密碼,那么久為null
        JedisPool jedisPool = new JedisPool(jedisPoolConfig, "127.0.0.1", 6379, 300, null);

//        新建一個(gè)jedis,jedis:redis在Java中的客戶端實(shí)現(xiàn)
        Jedis jedis = null;
        try {
//            從連接池中獲取到一個(gè)jedis資源
            jedis = jedisPool.getResource();
//            設(shè)置key-value,并獲取value
            System.out.println(jedis.set("hxy", "888"));
            System.out.println(jedis.get("hxy"));
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
//            注意!!這里不是關(guān)閉連接,只是將jedis歸還到連接池
            if (jedis != null) {
                jedis.close();
            }
        }
    }

以上是不使用配置文件的情況下,將參數(shù)傳入到Jdispool類中來實(shí)現(xiàn)連接池的,如果使用了配置文件,那么直接調(diào)用Jdispool的無參構(gòu)造即可了,其他的操作和上面代碼的都是一樣的,我就不重復(fù)寫了。

最后在操作完的時(shí)候,別忘了使用jedis.close();將jedis歸還到連接池即可!

到此這篇關(guān)于SpringBoot集成Redis并實(shí)現(xiàn)主從架構(gòu)的文章就介紹到這了,更多相關(guān)SpringBoot集成Redis并實(shí)現(xiàn)主從架構(gòu)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解OAuth2 Token 一定要放在請(qǐng)求頭中嗎

    詳解OAuth2 Token 一定要放在請(qǐng)求頭中嗎

    這篇文章主要介紹了詳解OAuth2 Token 一定要放在請(qǐng)求頭中嗎,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Spring整合Mybatis具體代碼實(shí)現(xiàn)流程

    Spring整合Mybatis具體代碼實(shí)現(xiàn)流程

    這篇文章主要介紹了Spring整合Mybatis實(shí)操分享,文章首先通過介紹Mybatis的工作原理展開Spring整合Mybatis的詳細(xì)內(nèi)容,需要的小伙伴可以參考一下
    2022-05-05
  • Java基礎(chǔ)之finally語句與return語句詳解

    Java基礎(chǔ)之finally語句與return語句詳解

    這篇文章主要介紹了Java基礎(chǔ)之finally語句與return語句詳解,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Spring Boot jar中沒有主清單屬性的解決方法

    Spring Boot jar中沒有主清單屬性的解決方法

    這篇文章主要介紹了Spring Boot jar中沒有主清單屬性的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Intellij IDEA如何自定義注釋模板的實(shí)現(xiàn)方法

    Intellij IDEA如何自定義注釋模板的實(shí)現(xiàn)方法

    這篇文章主要介紹了Intellij IDEA如何自定義注釋模板的實(shí)現(xiàn)方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-05-05
  • java 算法 6種排序小結(jié)

    java 算法 6種排序小結(jié)

    這篇文章主要介紹了java 算法 6種排序,排序原理及實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-10-10
  • 解決Mybatis返回update后影響的行數(shù)問題

    解決Mybatis返回update后影響的行數(shù)問題

    這篇文章主要介紹了解決Mybatis返回update后影響的行數(shù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • java中this的用法示例(關(guān)鍵字this)

    java中this的用法示例(關(guān)鍵字this)

    這篇文章主要介紹了java中this的用法示例(關(guān)鍵字this),需要的朋友可以參考下
    2014-03-03
  • JAXB簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    JAXB簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要為大家詳細(xì)介紹了JAXB簡(jiǎn)介的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • java省市級(jí)聯(lián)下拉菜單實(shí)例代碼

    java省市級(jí)聯(lián)下拉菜單實(shí)例代碼

    這篇文章主要為大家詳細(xì)介紹了java省市級(jí)聯(lián)實(shí)例代碼,具有一定的參考價(jià)值,感興趣的朋友可以參考一下
    2016-05-05

最新評(píng)論