redis集群搭建

架构细节:
(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.
(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value
Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点
redis集群搭建
1.创建文件夹mkdir redis-cluster
2.复制redis下面的bin文件夹cp redis/bin redis-cluster/redis01 -r
3.进入redis01删除文件,rm -f dump.rdb因为要用一个干净的节点
4.vi redis.conf将端口改为7001,打开注释cluster-enabled yes
5.复制六份redis01:cp -r redis01/ redis02
cp -r redis01/ redis03
cp -r redis01/ redis04
cp -r redis01/ redis05
cp -r redis01/ redis06
6.将各个redis.conf配置文件中的端口改为7001-7006

7.在redis-cluster下面写一个脚本文件start-all.sh

cd redis01
./rcd redis01
edis-server redis.conf
cd ..
./redis-server redis.conf
cd ..
./r-server redis.conf
cd redis01
./redis-server redis.conf
cd ..
cd redis02
./redis-server redis.conf
cd ..
cd redis03
./redis-server redis.conf
cd ..
cd redis04
./redis-server redis.conf
cd ..
cd redis05
./redis-server redis.conf
cd ..
cd redis06
./redis-server redis.conf
cd ..
8.修改脚本文件权限:chmod u+x start-all.sh
9.复制源码包redis-3.0.0下面的*.rb文件复制到redis-cluster下面:cp redis-trib.rb /heima/redis-cluster
10.使用ruby脚本搭建集群,需要ruby的运行环境,安装ruby
yum install ruby
yum install rubygems
gem install redis-3.0.0.gem
11.使用ruby脚本搭建集群: ./redis-trib.rb create --replicas 1 192.168.137.2:7001 192.168.137.2:7002 192.168.137.2:7003 192.168.137.2:7004 192.168.137.2:7005 192.168.137.2:7006
12.连接集群客户端:
[root@www redis-cluster]# redis01/redis-cli -p 7004 -c
127.0.0.1:7004> set a 123
-> Redirected to slot [15495] located at 192.168.137.2:7003
OK
192.168.137.2:7003> set b 2
-> Redirected to slot [3300] located at 192.168.137.2:7001
OK
192.168.137.2:7001> set c a
-> Redirected to slot [7365] located at 192.168.137.2:7002
OK
13.关闭集群:redis01/redis-cli -p 7001 shutdown

jedis使用方法:

public class JedisTest {
@Test
	public void testJedis(){//单机版
	//创建yige连接jedis对象,参数端口ip
	Jedis jedis=new Jedis("192.168.137.2",6379);
	//直接使用jedis操作redis,所有jiedis命令都对应一个方法
	jedis.set("test123","my first jedis test");
	String string=jedis.get("test123");
	System.out.println(string);
	//关闭链姐
	jedis.close();
}
@Test
	public void testJedisPool(){
		//创建一个连接池对象,两个参数
		JedisPool jedisPool=new JedisPool("192.168.137.2",6379);
		//从连接池获得一个链接,就是一个jedis对象
		Jedis jedis=jedisPool.getResource();
		//jiedis操作redis
		String string=jedis.get("test123");
		System.out.println(string);
		//关闭连接,每次使用完毕后关闭连接,连接池才能回收资源
		jedis.close();
		//关闭连接池
		jedisPool.close();		
	}
@Test
	public void testJedisCluster(){//集群版
		//创建一个jediscluster对象,有一个参数nodes是一个set类型,setHostAndPortndport
		Set<HostAndPort> nodes=new HashSet<>();
		nodes.add(new HostAndPort("192.168.137.2",7001));
		nodes.add(new HostAndPort("192.168.137.2",7002));
		nodes.add(new HostAndPort("192.168.137.2",7003));
		nodes.add(new HostAndPort("192.168.137.2",7004));
		nodes.add(new HostAndPort("192.168.137.2",7005));
		nodes.add(new HostAndPort("192.168.137.2",7006));
		JedisCluster jedisCluster=new JedisCluster(nodes);		
		//直接使用jediscluster对象操作redis
		jedisCluster.set("test","123");
		String string=jedisCluster.get("test");
		System.out.println(string);
		//关闭jediscluster对象
		jedisCluster.close();
	}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值