亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

問題由來

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

老版解決

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

redis的配置類這里就不貼了,網上很多。

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ù)是怎樣分布在多個Redis實例上的

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

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

Redis分區(qū)有兩個主要目標:

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

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

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

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

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

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

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

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

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

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

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

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

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

分區(qū)的不足之處

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

2、涉及多個key的操作不能用Redis事務

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

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

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

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

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

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

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

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Spring依賴注入的三種方式詳解

    Spring依賴注入的三種方式詳解

    這篇文章主要給大家介紹了三種Spring依賴注入的方式,?settter方法注入,構造器注入以及變量(filed)?注入這三種方式,文章通過代碼示例給大家介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • Struts2源碼分析之ParametersInterceptor攔截器

    Struts2源碼分析之ParametersInterceptor攔截器

    這篇文章主要介紹了Struts2源碼分析之ParametersInterceptor攔截器,ParametersInterceptor攔截器其主要功能是把ActionContext中的請求參數(shù)設置到ValueStack中,,需要的朋友可以參考下
    2019-06-06
  • Mybatis Mapper接口工作原理實例解析

    Mybatis Mapper接口工作原理實例解析

    這篇文章主要介紹了Mybatis Mapper接口工作原理實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • Java模擬并解決緩存穿透問題

    Java模擬并解決緩存穿透問題

    這篇文章主要介紹了Java模擬并解決緩存穿透問題,本文給大家介紹的非常詳細,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-08-08
  • Java編程中的檢查型異常與非檢查型異常分析

    Java編程中的檢查型異常與非檢查型異常分析

    這篇文章主要介紹了Java編程中的未檢查型異常與非檢查型異常,以及異常的處理方式,需要的朋友可以參考下
    2017-09-09
  • java?webservice超時時間設置方法代碼

    java?webservice超時時間設置方法代碼

    當我們使用WebService進行調用時,有時會出現(xiàn)超時的情況,下面這篇文章主要給大家介紹了關于java?webservice超時時間設置方法的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • Java Gradle項目中的資源正確獲取方式

    Java Gradle項目中的資源正確獲取方式

    這篇文章主要介紹了Java Gradle項目中的資源正確獲取方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Java HashSet集合存儲遍歷學生對象代碼實例

    Java HashSet集合存儲遍歷學生對象代碼實例

    這篇文章主要介紹了Java HashSet集合存儲遍歷學生對象代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • 如何為Spark Application指定不同的JDK版本詳解

    如何為Spark Application指定不同的JDK版本詳解

    這篇文章主要給大家介紹了關于如何為Spark Application指定不同的JDK版本的相關資料,文中通過示例代碼將解決的方法介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友下面來隨著小編一起學習學習吧。
    2017-11-11
  • java環(huán)境搭建教程

    java環(huán)境搭建教程

    這篇文章主要為大家詳細介紹了java環(huán)境的搭建教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03

最新評論