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();
	}
	
}
相关文章
相关标签/搜索