架构细节:
(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
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
(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();
}
}