前言
首先了解一下redis目錄下的文件,如下圖:
1.redis.conf是Redis啓動時的需要用到的配置。啓動Redis的過程如下:
src/redis-server redis.conf
即可成功執行。
2.sentinel.conf是Redis的哨兵配置,啓動哨兵的過程如下:
src/redis-sentinel sentinel.conf
注:以上命令使用root權限執行,在圖中所示的路徑下(即redis根目錄,實際上redis-server、redis-cli、redis-sentinel等命令在src下,保持命令和配置文件的路徑都正確即可)打開終端執行命令。
一、Sentinel模式
1. Linux Sentinel搭建
1.1 配置redis.conf
redis.config中把配置劃分的很清楚,每部分用下面的方式劃分開,如下圖示例:
第一步:找到NETWORK選項,將下圖中的bind註釋掉 。目的:防止遠端IP無法訪問。
第二步:還是NETWORK部分,找到protected-mode部分,將yes改爲no。目的:防止保護模式開啓造成的遠端IP無法訪問的問題。
第三步(可選):在 APPEND ONLY MODE下,把appendonly 設置爲 yes。目的:使用redis的AOF快照方式進行持久化。
說明:redis中的其他配置,自選進行配置,配置在配置文件的各部分中都有詳細的英文說明。
1.2 配置sentinel.conf
第一步:將protected-mode設置爲no,如下圖。目的:防止保護模式開啓造成的遠端IP無法獲得sentinel的問題。
第二步:配置監控的對象。找到sentinel monitor ...部分,如下圖。設置被監控的主庫IP, 端口號,主庫掛掉時,哨兵同意進行恢復的數量。其中“mymaster”爲自定義的主庫名,redis默認定義爲mymaster。如果想改成別的名字,記得在配置中把其他使用了mymsater的位置一併修改。
1.3 配置從庫的redis.config
在1.1的基礎上,只需要在REPLICATION部分,找到下圖位置,設置要跟隨的主庫的IP地址和端口即可。
注意:這裏要寫主庫的實際IP地址,不要寫127.0.0.1這個本地測試地址。在後續的java使用中,會出現問題:redis數據存儲在了java程序運行位置的機器上。具體原因:沒有深究。
2.Spring 和 Redis Sentinel整合
這裏的過程參考了,感謝原作者的付出 http://blog.csdn.net/qq_34021712/article/details/75949706
項目demo放在了GitHub上,地址:https://github.com/BigOrange1994/SpringBootLearn.git
大致過程說明:
2.1 配置spring-redis.xml
第一步:配置JedisConnectionFactory,用於建立連接
第二步:配置JedisPoolConfig,以後從這個池子裏拿連接
第三步:配置RedisSentinelConfiguration,用於設置sentinel相關
第四步:配置RedisTemplate,Spring提供的高抽象級別的、具有更高交互性的redis操作模板
2.2 由於項目使用了Spring Boot而不是 http://blog.csdn.net/qq_34021712/article/details/75949706這篇教程中說的Spring
MVC ,所以使用瞭如下類增加Spring Boot對xml的支持。(也可以使用Spring Boot中相關的註解代替xml,由於我本身剛深入學習,暫時沒去尋找相關注解和類)
2.3 使用RedisTemplate完成RedisUtil工具類。
2.4 項目結構。
2.5 運行結果
如果在啓動時,看到如下的配置,說明你的配置都沒有問題了,可以用自定義的RedisUtil中的方法測試。
運行結果:
二、Cluster模式
1. Linux Redis Cluster搭建
Cluster模式至少需要“三主三從”(即:三個主庫三個從庫),方可搭建集羣。開啓6個redis實例即可。每個實例只需要配置redis即可。不需要指定誰是主庫誰是從庫。在之後的步驟裏,會進行說明。
1.1 配置redis.conf
在第一部分Sentinel模式的1.1的基礎上,只需要在REDIS CLUSTER部分,找到下圖位置,設置集羣模式爲yes即可。
1.2 設置redis的端口號(可選, 如果6個redis實例的IP相同,則需要配置不同的端口號)
在NETWORK部分,找到下圖位置,設置端口號即可。
1.3 藉助redis.trib.rb完成集羣初始化
在linux 終端下,使用下圖紅框命令,安裝輔助工具。
安裝完成後,使用命令:
src/redis-trib.rb create --replicas 1 192.168.92.128:6379 192.168.92.131:6379 192.168.92.132:6379 192.168.92.132:6380 192.168.92.132:6381 192.168.92.132:6382
replicas 後面的 1 代表分配每個主庫多少個從庫。這就回答了,爲什麼不需要像sentinel那樣指定哪個從庫跟隨哪個主庫。因爲已經自動配置好了。
執行後會詢問你一個問題:Can I set the above configuration? (type 'yes' to accept): 此時,輸入yes即可。集羣就搭建好了。如下圖:
期間遇到的錯誤有:
問題1:
問題2:
以上問題,將redis目錄下的如下圖所示的三個文件刪除即可。重新執行上述集羣搭建命令。
問題3:
原因:redis實例數少於6
1.4 使用Redis客戶端查看集羣
發現,集羣中只有索引爲0的數據庫了。完美。
2.Spring 和 Redis Cluster整合
這裏的過程參考了,感謝原作者的付出 http://www.sojson.com/blog/203.html
項目demo也放在了GitHub上,地址也是:https://github.com/BigOrange1994/SpringBootLearn.git
大致過程說明:
2.1 配置spring-redis-cluster.xml
第一步:配置JedisConnectionFactory,用於建立連接
第二步:配置JedisPoolConfig,以後從這個池子裏拿連接
第三步:RedisClusterConfiguration,用於配置redis cluster集羣相關
第四步:配置RedisTemplate,Spring提供的高抽象級別的、具有更高交互性的redis操作模板
2.2 項目結構
2.3 測試和結論
測試代碼:
測試結果: