目錄
springboot整合redis修改分區
問題由來
老版解決
新版解決
redis分割區
為什麼分割區是有用的呢
不同的分區實作
分區的不足之處
資料儲存還是快取?
首頁 資料庫 Redis springboot怎麼整合redis修改分區

springboot怎麼整合redis修改分區

May 27, 2023 pm 07:16 PM
redis springboot

springboot整合redis修改分區

問題由來

最近使用springboot整合redis,一個系統動態資料來源連接不同資料庫,快取使用的redis,那麼就需要將不同資料庫的數據快取到redis不同的分區,也就是不同的庫。

老版解決

這裡的老版指的是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分割區

資料是怎麼分佈在多個Redis實例上的

# 分割區是將你的資料分佈在多個Redis實例上,以至於每個實例只包含一部分資料。

為什麼分割區是有用的呢

Redis分割區有兩個主要目標:

  1. 它允許更大的資料庫,用許多電腦的記憶體總和。如果不進行分區,你將會受限於單一電腦的記憶體。

  2. 它允許將運算能力擴展到多核心和多台計算機,將網路頻寬擴展到多台電腦和網路適配器。

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

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

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

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

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

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

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

不同的分區實作

客戶端分區 : 對於一個給定的key,客戶端直接選擇正確的節點來進行讀寫。許多Redis客戶端都實作了客戶端分區。

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

查詢路由 : 你可以將你的查詢傳送到任何一個Redis實例,實例會將你的查詢重定向到正確的伺服器。

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

分區的不足之處

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

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

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

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

5、增加和刪除容量(空間)變得更複雜。例如,Redis叢集支援在運行時新增和刪除節點的透明資料再平衡,但其他系統如客戶端分區和代理程式不支援此功能。然而,一種稱為預分片的技術在這方面有幫助。

資料儲存還是快取?

當Redis用作資料儲存時,給定的key必須總是映射到相同的Redis實例。當作為快取時,如果給定節點不可用它不是一個大問題。

如果給定key的首選節點不可用,一致哈希實作通常能夠切換到其他節點。類似地,如果新增一個節點,部分新keys將開始儲存在新節點上。

  • 如果使用Redis作為緩存,使用一致雜湊很容易進行伸縮。

  • 如果Redis用作存儲,則使用固定的keys-to-nodes映射,因此節點的數量必須是固定的,且不能改變。如果需要重新平衡節點之間的key,那麼Redis叢集是一種可行的系統。

#

以上是springboot怎麼整合redis修改分區的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Windows11安裝10.0.22000.100跳出0x80242008錯誤解決方法 Windows11安裝10.0.22000.100跳出0x80242008錯誤解決方法 May 08, 2024 pm 03:50 PM

Windows11安裝10.0.22000.100跳出0x80242008錯誤解決方法

剖析 PHP 函數瓶頸,提升執行效率 剖析 PHP 函數瓶頸,提升執行效率 Apr 23, 2024 pm 03:42 PM

剖析 PHP 函數瓶頸,提升執行效率

Golang API快取策略與最佳化 Golang API快取策略與最佳化 May 07, 2024 pm 02:12 PM

Golang API快取策略與最佳化

redis是記憶體快取嗎 redis是記憶體快取嗎 Apr 20, 2024 am 05:26 AM

redis是記憶體快取嗎

redis是非關係型資料庫嗎 redis是非關係型資料庫嗎 Apr 20, 2024 am 05:36 AM

redis是非關係型資料庫嗎

erlang和golang性能哪個好? erlang和golang性能哪個好? Apr 21, 2024 am 03:24 AM

erlang和golang性能哪個好?

PHP開發中的快取機制與應用實戰 PHP開發中的快取機制與應用實戰 May 09, 2024 pm 01:30 PM

PHP開發中的快取機制與應用實戰

PHP數組分頁中如何使用Redis快取? PHP數組分頁中如何使用Redis快取? May 01, 2024 am 10:48 AM

PHP數組分頁中如何使用Redis快取?

See all articles