最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot整合redis修改分區(qū)的操作流程

 更新時(shí)間:2021年07月05日 15:15:05   作者:小渣筆記  
這篇文章主要介紹了springboot整合redis修改分區(qū)的操作流程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

springboot整合redis修改分區(qū)

問題由來

最近使用springboot整合redis,一個(gè)系統(tǒng)動(dòng)態(tài)數(shù)據(jù)源連接不同數(shù)據(jù)庫,緩存使用的redis,那么就需要將不同數(shù)據(jù)庫的數(shù)據(jù)緩存到redis不同的分區(qū),也就是不同的庫中。

老版解決

這里的老版指的是2.0之前的,我使用的1.5.9是ok的。

redis的配置類這里就不貼了,網(wǎng)上很多。

1.使用JedisConnectionFactory修改

@Autowired
JedisConnectionFactory jedisConnectionFactory;
jedisConnectionFactory.setDatabase(database);

2.使用redisTemplate修改

redisTemplate.getConnectionFactory().getConnection().select(database);

以上兩種方式不需要再redis配置類中特意添加bean

新版解決

這里的新版指的是2.0之后的,我用的是2.0.3

redis配置類中需要添加以下bean

    @Bean
    RedisStandaloneConfiguration redisStandaloneConfiguration() {
        RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
        redisStandaloneConfiguration.setHostName("localhost");
        redisStandaloneConfiguration.setPort(6379);
        redisStandaloneConfiguration.setDatabase(0);
        return redisStandaloneConfiguration;
    }
    @Bean
    JedisConnectionFactory jedisConnectionFactory(RedisStandaloneConfiguration redisStandaloneConfiguration) {
        //redisStandaloneConfiguration.setPassword(RedisPassword.of(password));
        JedisClientConfiguration.JedisClientConfigurationBuilder jedisClientConfiguration = JedisClientConfiguration.builder();
        jedisClientConfiguration.connectTimeout(Duration.ofMillis(0));//  connection timeout
        JedisConnectionFactory factory = new JedisConnectionFactory(redisStandaloneConfiguration,
                jedisClientConfiguration.build());
        return factory;
    }

使用RedisStandaloneConfiguration修改

@Autowired
RedisStandaloneConfiguration redisStandaloneConfiguration;
redisStandaloneConfiguration.setDatabase(database);

redis分區(qū)

數(shù)據(jù)是怎樣分布在多個(gè)Redis實(shí)例上的

分區(qū)是將你的數(shù)據(jù)分布在多個(gè)Redis實(shí)例上,以至于每個(gè)實(shí)例只包含一部分?jǐn)?shù)據(jù)。

為什么分區(qū)是有用的呢

Redis分區(qū)有兩個(gè)主要目標(biāo):

  1. 它允許更大的數(shù)據(jù)庫,用許多計(jì)算機(jī)的內(nèi)存總和。如果不進(jìn)行分區(qū),你將會(huì)受限于單臺(tái)計(jì)算機(jī)的內(nèi)存。
  2. 它允許將計(jì)算能力擴(kuò)展到多核和多臺(tái)計(jì)算機(jī),將網(wǎng)絡(luò)帶寬擴(kuò)展到多臺(tái)計(jì)算機(jī)和網(wǎng)絡(luò)適配器。

假設(shè)我們有4個(gè)Redis實(shí)例(R0, R1, R2, R3),其上有許多代表用戶的key,比如user:1, user:2, ... 等等,那么在存儲(chǔ)一個(gè)key的時(shí)候我們有多種方式。

最簡(jiǎn)單的一種方式是按照范圍分區(qū),即根據(jù)對(duì)象的映射范圍將數(shù)據(jù)分配到指定的Redis實(shí)例上。例如,我們規(guī)定ID為0~10000的就分到R0,10001~20000到R1,以此類推。這種方式是可以的,但是有一個(gè)缺點(diǎn)是需要一張表來維護(hù)這個(gè)映射關(guān)系。這個(gè)表需要管理起來,而且每一個(gè)key都需要一個(gè)這樣的表,因此Redis中的范圍分區(qū)通常是不受歡迎的,因?yàn)樗绕渌謪^(qū)方法效率低得多。

除了范圍分區(qū)以外,另一種方法是哈希分區(qū)(hash partitioning):

第1步、取key,并應(yīng)用哈希函數(shù)將其轉(zhuǎn)換為一個(gè)數(shù)。例如,如果key是foobar,哈希函數(shù)式crc32,那么crc32(foobar)將輸出93024922。

第2步、對(duì)這個(gè)數(shù)字使用模運(yùn)算(取模)將它轉(zhuǎn)換成0到3直接的數(shù)字,這樣這個(gè)數(shù)字就可以映射到我的四個(gè)Redis實(shí)例之一。例如,93024922 % 4 = 2,因此foobar應(yīng)該存儲(chǔ)到R2實(shí)例上。

(PS:首先,對(duì)key做哈希運(yùn)算,得到一個(gè)數(shù)字,然后對(duì)這個(gè)數(shù)字取模,以決定最終數(shù)據(jù)應(yīng)該存放在哪個(gè)實(shí)例上)

分區(qū)的方法還有很多種,通過上面兩個(gè)示例,你應(yīng)該可以理解。哈希分區(qū)的一種高級(jí)形式稱為一致性哈希,由幾個(gè)Redis客戶端和代理實(shí)現(xiàn)。

不同的分區(qū)實(shí)現(xiàn)

客戶端分區(qū) : 對(duì)于一個(gè)給定的key,客戶端直接選擇正確的節(jié)點(diǎn)來進(jìn)行讀寫。許多Redis客戶端都實(shí)現(xiàn)了客戶端分區(qū)。

代理分區(qū) : 客戶端發(fā)送請(qǐng)求到一個(gè)代理,由代理來和Redis通信,代理會(huì)根據(jù)我們的配置來選擇正確的Redis實(shí)例。

查詢路由 : 你可以將你的查詢發(fā)送到任何一個(gè)Redis實(shí)例,實(shí)例會(huì)將你的查詢重定向到正確的服務(wù)器。

(PS:對(duì)于一個(gè)給定的key,分區(qū)的工作就是選擇一個(gè)正確的Redis實(shí)例,那么這個(gè)選擇的過程可以由客戶端、代理 或者 Redis實(shí)例來做)

分區(qū)的不足之處

1、涉及多個(gè)key的操作通常是不支持的。對(duì)于映射到兩個(gè)不同的Redis實(shí)例的key,你不能往這兩個(gè)上執(zhí)行插入操作。

2、涉及多個(gè)key的操作不能用Redis事務(wù)

3、分區(qū)粒度是key,因此不可能將一單個(gè)非常巨大的key(比如,一個(gè)非常大的sorted set)去切分?jǐn)?shù)據(jù)

4、當(dāng)使用分區(qū)的時(shí)候,數(shù)據(jù)處理會(huì)更復(fù)雜,對(duì)于實(shí)例你必須處理多個(gè)RDB/AOF文件,為了備份數(shù)據(jù),需要從多個(gè)實(shí)例和主機(jī)聚合持久文件。

5、增加和刪除容量(空間)變得更復(fù)雜。例如,Redis集群支持在運(yùn)行時(shí)添加和刪除節(jié)點(diǎn)的透明數(shù)據(jù)再平衡,但其他系統(tǒng)如客戶端分區(qū)和代理不支持此功能。然而,一種叫做預(yù)分片的技術(shù)在這方面有幫助。

數(shù)據(jù)存儲(chǔ)還是緩存?

當(dāng)Redis用作數(shù)據(jù)存儲(chǔ)時(shí),給定的key必須總是映射到相同的Redis實(shí)例。當(dāng)作為緩存時(shí),如果給定節(jié)點(diǎn)不可用它不是一個(gè)大問題。

如果給定key的首選節(jié)點(diǎn)不可用,一致哈希實(shí)現(xiàn)通常能夠切換到其他節(jié)點(diǎn)。類似地,如果添加一個(gè)新節(jié)點(diǎn),部分新keys將開始存儲(chǔ)在新節(jié)點(diǎn)上。

  • 如果使用Redis作為緩存,使用一致哈希很容易進(jìn)行伸縮。
  • 如果Redis用作存儲(chǔ),則使用固定的keys-to-nodes映射,因此節(jié)點(diǎn)的數(shù)量必須是固定的,且不能改變。否則,就需要一個(gè)能夠在節(jié)點(diǎn)之間重新平衡key的系統(tǒng),當(dāng)前Redis集群是可以做到這一點(diǎn)的。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java 照片對(duì)比功能的實(shí)現(xiàn)

    Java 照片對(duì)比功能的實(shí)現(xiàn)

    這篇文章主要介紹了Java 照片比對(duì)功能實(shí)現(xiàn)類的示例代碼,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-12-12
  • idea查看class字節(jié)碼的示例代碼

    idea查看class字節(jié)碼的示例代碼

    本文給大家分享三種方法介紹idea查看class字節(jié)碼,每種方法給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2025-04-04
  • springboot集成ftp實(shí)現(xiàn)文件上傳

    springboot集成ftp實(shí)現(xiàn)文件上傳

    這篇文章主要為大家詳細(xì)介紹了springboot集成ftp實(shí)現(xiàn)文件上傳,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • java 反射 動(dòng)態(tài)調(diào)用不同類的靜態(tài)方法(推薦)

    java 反射 動(dòng)態(tài)調(diào)用不同類的靜態(tài)方法(推薦)

    下面小編就為大家?guī)硪黄狫AVA 反射 動(dòng)態(tài)調(diào)用不同類的靜態(tài)方法(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-08-08
  • mybatis-plus自定義排序的實(shí)現(xiàn)

    mybatis-plus自定義排序的實(shí)現(xiàn)

    本文主要介紹了mybatis-plus自定義排序的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • java實(shí)現(xiàn)漢字轉(zhuǎn)unicode與漢字轉(zhuǎn)16進(jìn)制實(shí)例

    java實(shí)現(xiàn)漢字轉(zhuǎn)unicode與漢字轉(zhuǎn)16進(jìn)制實(shí)例

    這篇文章主要介紹了java實(shí)現(xiàn)漢字轉(zhuǎn)unicode與漢字轉(zhuǎn)16進(jìn)制的實(shí)現(xiàn)方法,是Java操作漢字編碼轉(zhuǎn)換的一個(gè)典型應(yīng)用,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10
  • 使用java對(duì)一副撲克牌建模

    使用java對(duì)一副撲克牌建模

    這篇文章主要為大家詳細(xì)介紹了如何使用java對(duì)一副撲克牌建模,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • MapStruct升級(jí)遇到的問題及解決方案

    MapStruct升級(jí)遇到的問題及解決方案

    MapStruct是一個(gè)用于生成類型安全,本文來介紹一下MapStruct升級(jí)遇到的問題及解決方案,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-12-12
  • SpringBoot自定義錯(cuò)誤處理邏輯詳解

    SpringBoot自定義錯(cuò)誤處理邏輯詳解

    這篇文章主要介紹了SpringBoot自定義錯(cuò)誤處理邏輯,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-10-10
  • java.util.ArrayDeque類使用方法詳解

    java.util.ArrayDeque類使用方法詳解

    這篇文章主要介紹了java.util.ArrayDeque類使用方法,java.util.ArrayDeque類提供了可調(diào)整大小的陣列,并實(shí)現(xiàn)了Deque接口,感興趣的小伙伴們可以參考一下
    2016-03-03

最新評(píng)論

黑龙江省| 兴和县| 朝阳区| 洞头县| 扎赉特旗| 荔波县| 沙河市| 仁化县| 三门峡市| 布尔津县| 沙河市| 颍上县| 湟源县| 荔浦县| 安顺市| 成都市| 蒙阴县| 黄大仙区| 双牌县| 玛纳斯县| 大埔县| 麻江县| 昌平区| 布拖县| 芷江| 凉城县| 闵行区| 临海市| 松滋市| 远安县| 宁城县| 保德县| 长治市| 江津市| 十堰市| 香河县| 黄陵县| 河源市| 启东市| 巴南区| 灌南县|