原文地址:http://www.jianshu.com/p/22af55518f6d
一、开发环境
1、win7
2、redis 3.0 64位
3、ruby环境
二、相关安装
1、redis安装
参考:http://blog.csdn.net/littleskey/article/details/52241904
2、ruby环境准备
下载 64位的 RubyInstaller并安装 地址http://rubyinstaller.org/downloads/勾选下面三个不用配置环境变量
3、RubyGems安装
下载下来是一个压缩包,解压运行里面的 setup.rb 安装 rubyGems
(原文说ruby的源很慢,换成淘宝的源。本文实现时,淘宝的源已不可用,在此不更换源。如需更换,请查看原文)
4、下载redis-trib.rb
参照上文下载下来的redis包,没有该文件。到https://github.com/antirez/redis/tree/unstable/src 目录下下载。之前的ruby环境就是为运行这个文件做准备的。
三、Redis相关配置
文档说明:http://doc.redisfans.com/topic/cluster-tutorial.html#id5
要让集群正常运作至少需要三个主节点, 不过在刚开始试用集群功能时, 强烈建议使用六个节点: 其中三个为主节点, 而其余三个则是各个主节点的从节点。
1、创建节点
创建六个文件夹,每个文件夹复制一份下载的Redis包。如:
2、修改redis.window.conf文件
(1)修改各个文件对应的端口号。如:
修改redis-lates1中redis.window.conf的port为7000
修改redis-lates2中redis.window.conf的port为7001
依次类推。
(2)公共部分
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
3、创建启动脚本startRedis.bat
这样不用总是敲命令,其他几个文件夹同理
4、启动集群
(1)启动上面所说各个redis实例
(2)到redis-trib.rb(没有参考二 4、下载redis-trib.rb)所在目录运行命令
redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
redis-trib.rb
create, 这表示我们希望创建一个新的集群。
选项 --replicas 1 表示我们希望为集群中的每个主节点创建一个从节点。
之后跟着的其他参数则是实例的地址列表, 我们希望程序使用这些地址所指示的实例来创建新集群
(replicas 后为1不为小写L)
以上命令的意思就是让 redis-trib 程序创建一个包含三个主节点和三个从节点的集群。
(3)执行结果
打印出配置信息,现在的master是 7000 7001 7002这三台机,redis会对key 做 CRC16 校验和后分别存储这三台机上。没问题就输入 yes(上例未输入yes,程序中止)
例如 7000 这台机 slots:0-5460 的意思是:
对key 做 CRC16 校验和后 值在 0-5460范围内都会存到这台机器里。例如 key=288 对应的CRC16校验和 为 4258,应该存在7000这台机里
四、Jedis编程使用集群
package com.learn.redis;
import java.util.HashSet;
import java.util.Set;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
public class RedisClusterTest {
private JedisCluster jc;
@Before
public void init()
{
Set<HostAndPort> nodes = new HashSet<>();
//Jedis Cluster会自动发现集群中的节点
nodes.add(new HostAndPort("127.0.0.1", 7000));
jc = new JedisCluster(nodes);
}
@Test
public void test()
{
jc.set("foo","bar");
System.out.println(jc.get("foo"));
}
}