redis集羣的搭建和jedis的使用

1 集羣搭建

`1.建立磁盤 
mkdir redis-cluster

2.複製redis文件
cp redis/bin redis-cluster/redis01 -r

3.進入redis01文件目錄
cd redis-cluster/redis01

4.刪除dump.rdb 和 appendonly.aof文件
rm -f dump.rdb

5 編輯redis.conf 文件
vim redis.conf
改 port 端口爲:7001
打開cluster-enabled yes 

6 複製多份redis01文件 並改redis.conf文件的port端口爲 7002  。。。。

7 啓動redis多個服務器
./redis-all.sh

8 查看redis啓動狀況
ps aux|grep redis

9. 進入redis源碼目錄,複製到redis集羣中去
/root/redis-3.0.0/src
cp redis-trib.rb  /usr/local/redis-cluster/

10.安裝rb 運行環境
10.一、使用ruby腳本搭建集羣。須要ruby的運行環境。
安裝ruby
yum install ruby
yum install rubygems

10.2 按alt+p 打開文件傳輸列表 把redis-3.0.0.gem 傳入服務器

cp redis-3.0.0.gem /usr/local/redis-cluster/

cd /usr/local/redis-cluster/

10.3 安裝 redis-3.0.0.gem
 gem install redis-3.0.0.gem 

10.4 啓動reids-trib.rb 文件
./redis-trib.rb create --replicas 1 192.168.36.30:7001 192.168.36.30:7002 192.168.36.30:7003 192.168.36.30:7004 192.168.36.30:7005 192.168.36.30:7006

10.5 而後點擊yes

11. 測試redis集羣的使用

redis01/redis-cli -p 7004 -c

set a 123
get a
  1. Redis集羣的搭建 5.1. redis-cluster架構圖

1

redis-cluster投票:容錯java

2

架構細節:node

(1)全部的redis節點彼此互聯(PING-PONG機制),內部使用二進制協議優化傳輸速度和帶寬.redis

(2)節點的fail是經過集羣中超過半數的節點檢測失效時才生效.算法

(3)客戶端與redis節點直連,不須要中間proxy層.客戶端不須要鏈接集羣全部節點,鏈接集羣中任何一個可用節點便可vim

(4)redis-cluster把全部的物理節點映射到[0-16383]slot上,cluster 負責維護node<->slot<->valueruby

Redis 集羣中內置了 16384 個哈希槽,當須要在 Redis 集羣中放置一個 key-value 時,redis 先對 key 使用 crc16 算法算出一個結果,而後把結果對 16384 求餘數,這樣每一個 key 都會對應一個編號在 0-16383 之間的哈希槽,redis 會根據節點數量大體均等的將哈希槽映射到不一樣的節點服務器

3

5.2. Redis集羣的搭建 Redis集羣中至少應該有三個節點。要保證集羣的高可用,須要每一個節點有一個備份機。 Redis集羣至少須要6臺服務器。 搭建僞分佈式。可使用一臺虛擬機運行6個redis實例。須要修改redis的端口號7001-7006 5.2.1. 集羣搭建環境 一、使用ruby腳本搭建集羣。須要ruby的運行環境。 安裝ruby架構

yum install ruby
yum install rubygems

二、安裝ruby腳本運行使用的包。app

[root@localhost ~]# gem install redis-3.0.0.gem 
Successfully installed redis-3.0.0
1 gem installed
Installing ri documentation for redis-3.0.0...
Installing RDoc documentation for redis-3.0.0...
[root@localhost ~]# 

[root@localhost ~]# cd redis-3.0.0/src
[root@localhost src]# ll *.rb
-rwxrwxr-x. 1 root root 48141 Apr  1  2015 redis-trib.rb

5.2.2. 搭建步驟 須要6臺redis服務器。搭建僞分佈式。 須要6個redis實例。 須要運行在不一樣的端口7001-7006分佈式

第一步:建立6個redis實例,每一個實例運行在不一樣的端口。須要修改redis.conf配置文件。配置文件中還須要把cluster-enabled yes前的註釋去掉。

第二步:啓動每一個redis實例。 第三步:使用ruby腳本搭建集羣。

./redis-trib.rb create --replicas 1 192.168.25.153:7001 192.168.25.153:7002 192.168.25.153:7003 192.168.25.153:7004 192.168.25.153:7005 192.168.25.153:7006

建立關閉集羣的腳本:

[root@localhost redis-cluster]# vim shutdow-all.sh
redis01/redis-cli -p 7001 shutdown
redis01/redis-cli -p 7002 shutdown
redis01/redis-cli -p 7003 shutdown
redis01/redis-cli -p 7004 shutdown
redis01/redis-cli -p 7005 shutdown
redis01/redis-cli -p 7006 shutdown
[root@localhost redis-cluster]# chmod u+x shutdow-all.sh
[root@localhost redis-cluster]# ./redis-trib.rb create --replicas 1 192.168.25.153:7001 192.168.25.153:7002 192.168.25.153:7003 192.168.25.153:7004 192.168.25.153:7005  192.168.25.153:7006

2 jedis的操做

package com.shi.page;

import java.util.HashSet;
import java.util.Set;

import org.junit.Test;

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPool;

public class JedisTest {
	
	//jedis鏈接redis的基本使用
	@Test
	public void testJedis()throws Exception{
		//1建立一個jedis對象,參數 host,port
		Jedis jedis=new Jedis("192.168.36.30",6379);
		//2直接使用jedis操做reids,全部jedis操做都對應一個方法
		jedis.set("abc", "zhangsan");
		String abc=jedis.get("abc");
		System.out.println("abc="+abc);
		//3 關閉鏈接
		jedis.close();
	}
	
	//使用JedisPool鏈接池來鏈接redis
	@Test
	public void testJedisPool()throws Exception{
		//1 建立一個鏈接池對象,倆個參數host,port
		JedisPool jedisPool=new JedisPool("192.168.36.30",6379);
		//2 從鏈接池得到一個鏈接,就是一個jedis對象
		Jedis jedis=jedisPool.getResource();
		//3 使用jedis操做redis
		jedis.set("shi", "shiye");
		String shi=jedis.get("shi");
		System.out.println("shi="+shi);
		//4 關閉鏈接,每次使用完畢以後關閉鏈接,鏈接遲迴收資源
		jedis.close();
		//5 關閉鏈接池
		jedisPool.close();
	}
	
	//使用jedisCluster鏈接redis集羣
	@Test
	public void testJedisCluster()throws Exception{
		/*1 建立一個jedisCluster對象,有一個參數nodes是一個set類型,
			set中包含若干個hostAndPort對像*/
		Set<HostAndPort> nodes=new HashSet<HostAndPort>();
			nodes.add(new HostAndPort("192.168.36.30", 7001));
			nodes.add(new HostAndPort("192.168.36.30", 7002));
			nodes.add(new HostAndPort("192.168.36.30", 7003));
			nodes.add(new HostAndPort("192.168.36.30", 7004));
			nodes.add(new HostAndPort("192.168.36.30", 7005));
			nodes.add(new HostAndPort("192.168.36.30", 7006));
		JedisCluster jedisCluster=new JedisCluster(nodes);
		
		//2 直接使用jedisCluster對象操做reids
		jedisCluster.set("test", "123");
		String test=jedisCluster.get("test");
		System.out.println("test="+test);
		
		//3 關閉jedisCluster對像
		jedisCluster.close();
	}
	
}
相關文章
相關標籤/搜索