Redis集群搭建及java连接redis
Redis集群搭建及java連接redis
Redis集群分為三種:
1、主從關(guān)系模式2、Sentinel哨兵關(guān)系模式3、Cluster去中心化模式1、主從關(guān)系模式
1.1、什么是主從模式?
(1)主節(jié)點(diǎn)只有一個(gè),從節(jié)點(diǎn)可以有多個(gè)(即一個(gè)主節(jié)點(diǎn)可以有多個(gè)對(duì)應(yīng)的從節(jié)點(diǎn))。
(2)主節(jié)點(diǎn)值負(fù)責(zé)寫入操作,從節(jié)點(diǎn)負(fù)責(zé)讀取操作(從節(jié)點(diǎn)無法使用寫入操作)。
(3)主節(jié)點(diǎn)宕機(jī)后,從節(jié)點(diǎn)會(huì)等待主節(jié)點(diǎn)修復(fù)歸來,整個(gè)集群無法使用。而一個(gè)從節(jié)點(diǎn)宕機(jī),不會(huì)影響到其他節(jié)點(diǎn)的運(yùn)行。
1.2、主從模式的搭建
(1)redis安裝目錄下創(chuàng)建master-slave目錄,將redis.conf文件復(fù)制三份進(jìn)去(假設(shè)有一個(gè)主節(jié)點(diǎn),兩個(gè)從節(jié)點(diǎn))
創(chuàng)建master-slave目錄用于存放主從的redis文件 mkdir master-slave復(fù)制三個(gè)redis.conf到創(chuàng)建的文件中 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②找到端口號(hào)的位置并修改為7001(自定義端口號(hào))
③修改持久化文件的名稱(RDB文件)
④關(guān)閉AOF的持久化:
(3)啟動(dòng)redis時(shí)指定上面的三個(gè)配置文件
redis-server redis7001.confredis-server redis7002.confredis-server redis7003.conf(4)分別登錄redis7001、7002、7003賬號(hào)(注意分界面操作)
redis-cli -h ip(自己的ip) -p7001redis-cli -h ip(自己的ip) -p7002redis-cli -h ip(自己的ip) -p7003(5)設(shè)置7001為主節(jié)點(diǎn)
查看當(dāng)前節(jié)點(diǎn)主從信息 info replication從節(jié)點(diǎn)中設(shè)置7001為主節(jié)點(diǎn)(兩個(gè)從節(jié)點(diǎn)都要配置) slaveof ip(主節(jié)點(diǎn)所在的ip) 7001主從節(jié)點(diǎn)中分別使用讀寫操作,發(fā)現(xiàn):1、主節(jié)點(diǎn)只負(fù)責(zé)寫,但是可以進(jìn)行讀操作。2、從節(jié)點(diǎn)中可以進(jìn)行讀操作,但是無法使用寫操作。3、新增一個(gè)從節(jié)點(diǎn),會(huì)發(fā)現(xiàn)數(shù)據(jù)與其余節(jié)點(diǎn)數(shù)據(jù)一致。將主節(jié)點(diǎn)關(guān)閉發(fā)現(xiàn)從節(jié)點(diǎn)無法進(jìn)行讀取操作,查看主從信息顯示主節(jié)點(diǎn)處于down狀態(tài)。將主節(jié)點(diǎn)開啟,關(guān)閉其中一個(gè)從節(jié)點(diǎn),發(fā)現(xiàn)主從節(jié)點(diǎn)均不受影響。因此:1、主節(jié)點(diǎn)宕機(jī),集群會(huì)處于無法操作狀態(tài),從節(jié)點(diǎn)不能進(jìn)行操作。2、從節(jié)點(diǎn)宕機(jī),其余從節(jié)點(diǎn)及主節(jié)點(diǎn)均不受影響2、Sentinel哨兵關(guān)系模式:
哨兵可以有多個(gè),主節(jié)點(diǎn)每隔一段時(shí)間會(huì)向哨兵發(fā)送“狀態(tài)信息”,一旦超過規(guī)定時(shí)間未發(fā)送信息,哨兵會(huì)認(rèn)為主節(jié)點(diǎn)宕機(jī),隨后在從節(jié)點(diǎn)中選取一個(gè)節(jié)點(diǎn)作為主節(jié)點(diǎn),主節(jié)點(diǎn)再次上線后會(huì)成為新的主節(jié)點(diǎn)的從節(jié)點(diǎn)。
2.1哨兵模式的搭建
1、使用主從模式的redis(不再重新創(chuàng)建主從節(jié)點(diǎn))。2、修改sentinel文件中的配置 vi sentinel# 192.168.31.166表示redis主節(jié)點(diǎn)的ip (本機(jī)的可以為127.0.0.1) # 7001 表示主節(jié)點(diǎn)的端口號(hào) # 1 表示有多少個(gè)哨兵選取redis從節(jié)點(diǎn)后,該從節(jié)點(diǎn)可以當(dāng)選為主節(jié)點(diǎn)。 sentinel monitor mymaster 192.168.31.166 7001 13、啟動(dòng)哨兵 redis-sentinel sentinel.conf4、測(cè)試 將7001關(guān)閉,,哨兵選取了7002為主節(jié)點(diǎn)。哨兵解決了主從模式中主節(jié)點(diǎn)宕機(jī),從節(jié)點(diǎn)等待造成的集群停止運(yùn)行的缺點(diǎn)。但是哨兵依然沒有解決單節(jié)點(diǎn)的問題,且持久化文件始終在一個(gè)服務(wù)器上。3、Cluster去中心化集群
解決了單節(jié)點(diǎn)的問題。使用了分槽的概念。去中心化可以說是sentinel哨兵模式和主從模式的結(jié)合體,通過cluster可以實(shí)現(xiàn)主從和master重選功能,所以如果配置兩個(gè)副本三個(gè)分片的話,就需要六個(gè)Redis實(shí)例。因?yàn)镽edis的數(shù)據(jù)是根據(jù)一定規(guī)則分配到cluster的不同機(jī)器的,當(dāng)數(shù)據(jù)量過大時(shí),可以新增機(jī)器進(jìn)行擴(kuò)容。
3.1、創(chuàng)建集群并配置(必須保證aof開啟,并保證redis中沒有數(shù)據(jù))
1、創(chuàng)建three-master-three-slave文件夾 mkdir three-master-three-slave2、將redis.conf文件復(fù)制到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。。。。的配置 #修改端口號(hào)為8001: port 8001#修改為其他用戶可以連接: bind * -::*#修改為后臺(tái)運(yùn)行: daemonize yes#修改為AOF,改為開啟狀態(tài): appendonly yes#開啟集群 cluster-enabled yes 833行# 集群的配置文件,該文件自動(dòng)生成 cluster-config-file nodes-8001.conf 841行# 集群的超時(shí)時(shí)間 cluster-node-timeout 5000 847行3.2、啟動(dòng)所有redis并分配槽
(1)啟動(dòng)所有redisredis-server redis8001.confredis-server redis8002.confredis-server redis8003.confredis-server redis8004.confredis-server redis8005.confredis-server redis8006.conf(2)為主節(jié)點(diǎn)分配槽以及隨機(jī)分配從節(jié)點(diǎn),cluster-replica:表示每個(gè)主節(jié)點(diǎn)跟隨的從節(jié)點(diǎn)的個(gè)數(shù) 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項(xiàng)目)—jedis
(1)創(chuàng)建maven項(xiàng)目
(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);//必須運(yùn)行遠(yuǎn)程連接 必須防火墻放行該端口號(hào)//關(guān)于字符串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();//設(shè)置連接池的最大連接數(shù)config.setMaxTotal(100);//設(shè)置最大空閑的個(gè)數(shù)config.setMaxIdle(10);//在從連接池這種獲取連接對(duì)象前是否測(cè)試該對(duì)象可以。config.setTestOnBorrow(true);//創(chuàng)建連接池對(duì)象JedisPool jedisPool=new JedisPool(config,"192.168.31.166",6379);//獲取jedis對(duì)象Jedis jedis = jedisPool.getResource();System.out.println(jedis.get("k3"));//釋放資源jedis.close();} });
//創(chuàng)建連接池對(duì)象JedisPool jedisPool=new JedisPool(config,"192.168.31.166",6379);//獲取jedis對(duì)象Jedis jedis = jedisPool.getResource();System.out.println(jedis.get("k3"));//釋放資源jedis.close();}}
總結(jié)
以上是生活随笔為你收集整理的Redis集群搭建及java连接redis的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: maxlength不起作用android
- 下一篇: 数据库hash值获得