亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

springboot怎么整合redis修改分區

發布時間:2022-04-07 14:29:37 來源:億速云 閱讀:185 作者:iii 欄目:編程語言

這篇“springboot怎么整合redis修改分區”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“springboot怎么整合redis修改分區”文章吧。

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修改分區”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

连云港市| 兴国县| 通海县| 玛曲县| 海伦市| 义乌市| 伊金霍洛旗| 阳山县| 远安县| 连城县| 尖扎县| 祁阳县| 五河县| 桐梓县| 寿宁县| 犍为县| 孝义市| 惠来县| 深泽县| 漯河市| 留坝县| 娄烦县| 古交市| 太谷县| 泌阳县| 渝北区| 信宜市| 西宁市| 屏山县| 彭州市| 怀集县| 昌乐县| 会宁县| 蒲城县| 清新县| 上栗县| 银川市| 武陟县| 原平市| 洛宁县| 固原市|