一、搭建Ruby环境
redis集群管理工具redis-trib.rb依赖ruby环境,首先需要安装ruby环境。
1、安装ruby
[root@localhost bin]# yum install ruby
[root@localhost bin]# yum install rubygems
2、上传ruby和redis的接口工程redis-3.0.0.gem到Linux系统中
[root@localhost redis]# gem install redis-3.0.0.gem
3、创建redis-cluster集群文件夹
[root@localhost /]# mkdir /usr/local/redis-cluster -p
4、进入redis安装目录,拷贝redis-trib.rb文件拷入redis-cluster中
redis-trib.rb是搭建redis集群的脚本文件
[root@localhost etc]# cp /usr/local/java/redis-3.0.0/src/redis-trib.rb /usr/local/redis-cluster/
二、搭建Resis集群
1、规划环境
redis集群最少需要3台主机,每一台主机再配置一台从机,则需要6台机器。6台机器对应的端口分别是7001~7006
2、创建7001的文件夹,并将redis/bin目录拷入7001文件夹
[root@localhost redis-cluster]# cp ../redis/bin/ ./7001 -r
3、进入7001文件夹,删除 *.rdb *.aof nodes.conf文件(Redis节点必须是空节点,需要删除这些文件)
4、修改redis.conf配置文件
(1)、开启守护进程
(2)、修改端口为7001
(3)、启动集群
5、复制7001,按照以上步骤进行修改配置文件
6、创建启动脚本
7、给脚本设置启动权限
[root@localhost redis-cluster]# chmod u+x start-all.sh
8、执行脚本,启动redis,查看进程
9、创建集群
[root@localhost redis-cluster]# ./redis-trib.rb create --replicas 1 192.168.200.134:7001 192.168.200.134:7002 192.168.200.134:7003 192.168.200.134:7004 192.168.200.134:7005 192.168.200.134:7006
三、连接集群
[root@localhost 7001]# ./redis-cli -h 192.168.200.134 -p 7001 -c
说明:如果客户端可服务端在同一台机器,-h 命令可以不执行,但是 -p 命令任何时候都要执行 -c命令为启动集群的时候必须加的命令
注意:每次存储数值,会根据算法,将数据存储到不同的节点上
四、通过java代码连接集群
1、添加依赖
2、编写配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-4.0.xsd">
<!-- Jedis连接池 -->
<bean class="redis.clients.jedis.JedisPool">
<constructor-arg name="host" value="192.168.200.134" />
<constructor-arg name="port" value="6379" />
</bean>
<!-- Jedis集群 -->
<bean class="redis.clients.jedis.JedisCluster">
<constructor-arg name="nodes">
<set>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.200.134" />
<constructor-arg name="port" value="7001" />
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.200.134" />
<constructor-arg name="port" value="7002" />
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.200.134" />
<constructor-arg name="port" value="7003" />
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.200.134" />
<constructor-arg name="port" value="7004" />
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.200.134" />
<constructor-arg name="port" value="7005" />
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.200.134" />
<constructor-arg name="port" value="7006" />
</bean>
</set>
</constructor-arg>
</bean>
</beans>
3、编写测试代码
package test;
import java.util.HashSet;
import java.util.Set;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPool;
public class TestJedis {
private String host = "192.168.200.134";
private int port = 6379;
/**
* 单机版redis
*/
@Test
public void testJedis() {
// 创建jedis实例
Jedis jedis = new Jedis(host, port);
// 调用jedis的api方法存储或者获取数据
jedis.set("s1", "444");
System.out.println(jedis.get("s1"));
// 释放资源
jedis.close();
}
/**
* 使用连接池
*/
@Test
public void testJedisPool() {
// 创建jedis实例
JedisPool pool = new JedisPool(host, port);
// 获取jedis实例
Jedis jedis = pool.getResource();
// 调用方法存储
System.out.println(jedis.get("s1"));
// 释放资源
jedis.close();
pool.close();
}
/**
* 集群版redis
*/
@Test
public void testClusterRedis() {
Set<HostAndPort> nodes = new HashSet<>();
nodes.add(new HostAndPort(host, 7001));
nodes.add(new HostAndPort(host, 7002));
nodes.add(new HostAndPort(host, 7003));
nodes.add(new HostAndPort(host, 7004));
nodes.add(new HostAndPort(host, 7005));
nodes.add(new HostAndPort(host, 7006));
// 创建JedisCluster实例
JedisCluster cluster = new JedisCluster(nodes);
// 调用api
System.out.println(cluster.get("s3"));
// 释放资源
cluster.close();
}
/**
* 整合spring
*/
@Test
public void testSpirngJedisPool() {
ApplicationContext app = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-redis.xml");
JedisPool pool = app.getBean(JedisPool.class);
// 获取jedis实例
Jedis jedis = pool.getResource();
// 调用方法存储
System.out.println(jedis.get("s1"));
// 释放资源
jedis.close();
}
/**
* 测试集群
*/
@Test
public void testCluster(){
ApplicationContext app = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-redis.xml");
JedisCluster cluster = app.getBean(JedisCluster.class);
//调用方法
System.out.println(cluster.get("s2"));
}
}