Redis集群搭建及java连接redis
Redis集群搭建及java連接redis
Redis集群分為三種:
1、主從關系模式2、Sentinel哨兵關系模式3、Cluster去中心化模式1、主從關系模式
1.1、什么是主從模式?
(1)主節點只有一個,從節點可以有多個(即一個主節點可以有多個對應的從節點)。
(2)主節點值負責寫入操作,從節點負責讀取操作(從節點無法使用寫入操作)。
(3)主節點宕機后,從節點會等待主節點修復歸來,整個集群無法使用。而一個從節點宕機,不會影響到其他節點的運行。
1.2、主從模式的搭建
(1)redis安裝目錄下創建master-slave目錄,將redis.conf文件復制三份進去(假設有一個主節點,兩個從節點)
創建master-slave目錄用于存放主從的redis文件 mkdir master-slave復制三個redis.conf到創建的文件中 cp redis.conf /home/redis/master-slave/redis7001.conf cp redis.conf /home/redis/master-slave/redis7002.conf cp redis.conf /home/redis/master-slave/redis7003cd.conf(2)修改master-slave中的redis文件:
①編輯redis7001.conf文件。
vi redis7001.conf②找到端口號的位置并修改為7001(自定義端口號)
③修改持久化文件的名稱(RDB文件)
④關閉AOF的持久化:
(3)啟動redis時指定上面的三個配置文件
redis-server redis7001.confredis-server redis7002.confredis-server redis7003.conf(4)分別登錄redis7001、7002、7003賬號(注意分界面操作)
redis-cli -h ip(自己的ip) -p7001redis-cli -h ip(自己的ip) -p7002redis-cli -h ip(自己的ip) -p7003(5)設置7001為主節點
查看當前節點主從信息 info replication從節點中設置7001為主節點(兩個從節點都要配置) slaveof ip(主節點所在的ip) 7001主從節點中分別使用讀寫操作,發現:1、主節點只負責寫,但是可以進行讀操作。2、從節點中可以進行讀操作,但是無法使用寫操作。3、新增一個從節點,會發現數據與其余節點數據一致。將主節點關閉發現從節點無法進行讀取操作,查看主從信息顯示主節點處于down狀態。將主節點開啟,關閉其中一個從節點,發現主從節點均不受影響。因此:1、主節點宕機,集群會處于無法操作狀態,從節點不能進行操作。2、從節點宕機,其余從節點及主節點均不受影響2、Sentinel哨兵關系模式:
哨兵可以有多個,主節點每隔一段時間會向哨兵發送“狀態信息”,一旦超過規定時間未發送信息,哨兵會認為主節點宕機,隨后在從節點中選取一個節點作為主節點,主節點再次上線后會成為新的主節點的從節點。
2.1哨兵模式的搭建
1、使用主從模式的redis(不再重新創建主從節點)。2、修改sentinel文件中的配置 vi sentinel# 192.168.31.166表示redis主節點的ip (本機的可以為127.0.0.1) # 7001 表示主節點的端口號 # 1 表示有多少個哨兵選取redis從節點后,該從節點可以當選為主節點。 sentinel monitor mymaster 192.168.31.166 7001 13、啟動哨兵 redis-sentinel sentinel.conf4、測試 將7001關閉,,哨兵選取了7002為主節點。哨兵解決了主從模式中主節點宕機,從節點等待造成的集群停止運行的缺點。但是哨兵依然沒有解決單節點的問題,且持久化文件始終在一個服務器上。3、Cluster去中心化集群
解決了單節點的問題。使用了分槽的概念。去中心化可以說是sentinel哨兵模式和主從模式的結合體,通過cluster可以實現主從和master重選功能,所以如果配置兩個副本三個分片的話,就需要六個Redis實例。因為Redis的數據是根據一定規則分配到cluster的不同機器的,當數據量過大時,可以新增機器進行擴容。
3.1、創建集群并配置(必須保證aof開啟,并保證redis中沒有數據)
1、創建three-master-three-slave文件夾 mkdir three-master-three-slave2、將redis.conf文件復制到three-master-three-slave中 cp redis.conf /home/redis/three-master-three-slave/redis8001.conf cp redis.conf /home/redis/three-master-three-slave/redis8002.conf cp redis.conf /home/redis/three-master-three-slave/redis8003.conf cp redis.conf /home/redis/three-master-three-slave/redis8004.conf cp redis.conf /home/redis/three-master-three-slave/redis8005.conf cp redis.conf /home/redis/three-master-three-slave/redis8006.conf3、分別修改redis8001.conf。。。。的配置 #修改端口號為8001: port 8001#修改為其他用戶可以連接: bind * -::*#修改為后臺運行: daemonize yes#修改為AOF,改為開啟狀態: appendonly yes#開啟集群 cluster-enabled yes 833行# 集群的配置文件,該文件自動生成 cluster-config-file nodes-8001.conf 841行# 集群的超時時間 cluster-node-timeout 5000 847行3.2、啟動所有redis并分配槽
(1)啟動所有redisredis-server redis8001.confredis-server redis8002.confredis-server redis8003.confredis-server redis8004.confredis-server redis8005.confredis-server redis8006.conf(2)為主節點分配槽以及隨機分配從節點,cluster-replica:表示每個主節點跟隨的從節點的個數 redis-cli --cluster create --cluster-replicas 1 192.168.31.166:8001 192.168.31.166:8002 192.168.31.166:8003 192.168.31.166:8004 192.168.31.166:8005 192.168.31.166:8006(3)使用客戶端訪問 redis-cli -c -h 192.168.31.166 -p 80014、java連接redis(maven項目)—jedis
(1)創建maven項目
(2)引入Jedis依賴
<dependencies><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.3.0</version></dependency></dependencies>(3)使用jedis連接redis
public class TestJedis {public static void main(String[] args) {Jedis jedis=new Jedis("192.168.31.166",6379);//必須運行遠程連接 必須防火墻放行該端口號//關于字符串jedis.set("k1","v1");jedis.set("k8","18");jedis.mset("k2","v2","k3","v3","k4","v4");jedis.setnx("k1","12");jedis.decr("k8");//操作keySet<String> keys = jedis.keys("*");System.out.println("所有的key:"+keys);jedis.del("k1");jedis.expire("k2",60);jedis.ttl("k2");} }(4)使用jedis連接池
public class TestPoolJedis {public static void main(String[] args) {//連接池的配置JedisPoolConfig config=new JedisPoolConfig();//設置連接池的最大連接數config.setMaxTotal(100);//設置最大空閑的個數config.setMaxIdle(10);//在從連接池這種獲取連接對象前是否測試該對象可以。config.setTestOnBorrow(true);//創建連接池對象JedisPool jedisPool=new JedisPool(config,"192.168.31.166",6379);//獲取jedis對象Jedis jedis = jedisPool.getResource();System.out.println(jedis.get("k3"));//釋放資源jedis.close();} });
//創建連接池對象JedisPool jedisPool=new JedisPool(config,"192.168.31.166",6379);//獲取jedis對象Jedis jedis = jedisPool.getResource();System.out.println(jedis.get("k3"));//釋放資源jedis.close();}}
總結
以上是生活随笔為你收集整理的Redis集群搭建及java连接redis的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: maxlength不起作用android
- 下一篇: 数据库hash值获得