例如 Image.png 2.创建配置文件 redis.conf 其他几个7000-7004文件夹以此类推

时间:2021-08-28 08:09:10

要让集群正常运作至少需要三个主节点,因此我们创建6个节点,三个主节点三个从节点,详细请检察文档,,我简化一下文档的法式即:

1.创建 6个文件夹分袂为 7000-7005
这里就是做集群时各个机器所安置的redis,在每个文件夹放一份下载下来的redis,例如

例如 Image.png 2.创建配置文件 redis.conf 其他几个7000-7004文件夹以此类推


Image.png

2.创建配置文件 redis.conf
其他几个7000-7004文件夹以此类推,注意改削对应的端标语

port 7005
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

文件中的
cluster-enabled 选项用于开实例的集群模式,
cluster-conf-file 选项则设定了生存节点配置文件的路径, 默认值为nodes.conf 。
nodes.conf 节点配置文件无须酬报改削, 它由 Redis 集群在启动时创建, 并在有需要时自动进行更新。

3.创建启动脚本7005.bat
这样不用总是敲命令 ,名字随意改,其他几个文件夹同理

@echo off
redis-server.exe redis.conf
@pause

4.创建集群

1.凭据上面所说的配置好各个实例,主要是改端标语,运行 7000.bat- 7005.bat脚本启动六个redis实例

2.cd到 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

例如 Image.png 2.创建配置文件 redis.conf 其他几个7000-7004文件夹以此类推


Image.png

打印出配置信息,此刻的master是 7000 7001 7002这三台机,redis会对key 做 CRC16 校验和后分袂存储这三台机上。没问题就输入 yes

例如 7000 这台机 slots:0-5460 的意思是:

对key 做 CRC16 校验和后 值在 0-5460范畴内城市存到这台机器里
例如 key=288 对应的CRC16校验和 为 4258,应该存在7000这台机里

注意:使用前应该对业务做梳理,按照系统中key的特点来调解各个机器的slots范畴,
不然系统的key根基集中在一两台机器上集群的效果就不大了

redis-trib.rb文件不才载下来的redis包里可能是没有的,可以到
https://github.com/antirez/redis/tree/unstable/src 目录下下载
之前的ruby环境就是为运行这个文件做筹备的

命令的意义如下:

redis-trib.rb
create, 这暗示我们但愿创建一个新的集群。
选项 --replicas 1 暗示我们但愿为集群中的每个主节点创建一个从节点。
之后随着的其他参数则是实例的地点列表, 我们但愿措施使用这些地点所指示的实例来创建新集群。

简单来说, 以上命令的意思就是让 redis-trib 措施创建一个包罗三个主节点和三个从节点的集群。

看看node.conf文件里生成了什么

例如 Image.png 2.创建配置文件 redis.conf 其他几个7000-7004文件夹以此类推


Paste_Image.png

里面记录了master 和 slave的对应关系,例如图片里的 7000是master 而对应的 slave是7003这台机,绿色的一长串数字是对应机器的Id,redis以此来符号一台机器。

三、Jedis编程使用集群

github地点 https://github.com/xetorthio/jedis
按上面两步配置好,创建并启动集群。测试代码如下:

添加Jedis依赖

<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.4.2</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.7.3</version> </dependency>

测试代码:

@Test public void cluster(){ String key = "1417"; Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>(); jedisClusterNodes.add(new HostAndPort("127.0.0.1", 7000)); JedisCluster jc = new JedisCluster(jedisClusterNodes); jc.setnx(key, "bar"); String value = jc.get(key); System.out.println("key-"+key+" slot-"+JedisClusterCRC16.getSlot(key)+" value-"+value); String key2 = "288"; jc.setnx(key2, "bar2"); String value2 = jc.get(key); System.out.println("key-"+key2+" slot-"+JedisClusterCRC16.getSlot(key2)+" value-"+value2); }