Windows系统下搭建Redis Cluster集群

Redis的三种集群模式主要是:主从模式(redis2.8版本之前的模式)、哨兵sentinel模式(redis2.8及之后的模式)和redis cluster集群模式(redis3.0版本之后),今天主要讲解在windows系统下搭建redis cluster集群环境(集群正常运作至少需要三个主节点,我们测试集群功能采用三主三从,一共六个节点),以及在代码中集成使用redis cluster。
Redis Cluster集群搭建后的目录大致如下:
在这里插入图片描述

一、环境搭建

1、下载window系统redis安装包(版本必需要3.0以上,redis3.0版本之后才支持redis cluster集群模式)
我下载的版本是3.0.501。解压之后的目录内容:在这里插入图片描述

2、下载ruby安装包,按照指引安装
下载地址:https://rubyinstaller.org/downloads/
在这里插入图片描述

安装完成系统自动弹出弹框,输入命令对Ruby进行配置:

gem install redis

在这里插入图片描述

3、搭建redis三主三从环境
(1)在第1步解压后的redis目录下建立6个文件夹,分别以端口命名:7000,7001,7002,7003,7004,7005。再将第1步解压后的所有内容分别拷贝到每个文件夹下。
在这里插入图片描述

(2)在每个文件夹下分别建立一个批处理启动文件start.bat,启动时直接运行该批处理文件。start.bat内容如下(对应各自的端口号):

title redis-7000
redis-server.exe redis.windows.conf

在这里插入图片描述

(3)修改文件redis.windows.conf
修改6个节点文件目录下的redis.windows.conf,修改节点的端口号。比如

port 7000

在这里插入图片描述

(4)修改其他配置支持集群

cluster-enabled yes
cluster-config-file nodes-7000.conf 
cluster-node-timeout 15000
appendonly yes

cluster-config-file nodes-7000.conf: 是该节点的配置信息,比如当前节点端口号是7000,配置为cluster-config-file nodes-7000.conf,start.bat服务启动后会在目录生成文件nodes-7000.conf;
在这里插入图片描述

cluster-enabled 设置为yes;
cluster-node-timeout 调整为15000,在创建集群的时候,不会超时;

4、下载ruby语言集群脚本redis-trib.rb,复制到redis目录下
在这里插入图片描述

二、服务启动

1、进入6个端口号命名的文件夹下,启动start.bat文件
在这里插入图片描述

2、切换到redis目录下执行命令

ruby 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

集群节点按照从主到从的方式从左到右依次排列6个redis 节点,因此也可以看出7000,7001,7002三个是主节点,7003,7004,7005是三个从节点,对应关系是:主7000从7003,主7001从7004,主7002从7005。
在这里插入图片描述

出现Can I set the above configuration? (type ‘yes’ to accept): 输入yes
在这里插入图片描述

执行完成之后,在原来每个redis节点下面可以看出主从信息

在这里插入图片描述
在这里插入图片描述

3、启动异常处理
若执行第3步命令时提示:[ERR] Node 127.0.0.1:7000 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
在这里插入图片描述

问题原因:关闭redis集群时,直接关闭的命令行,应该按ctrl+c,然后系统会提示:终止批处理操作吗(Y/N)? 输入Y退出。
在这里插入图片描述

解决办法:每个redis子节点都要删除三个文件:appendonly.aof、dump.rdb、nodes-port.conf(比如nodes-7000.conf),然后再重新启动start.bat
在这里插入图片描述

4、使用redis可视化工具连接查看
在这里插入图片描述

开始db0没有数据
在这里插入图片描述

点击db0之外的db1等均提示:ReplyError: ERR SELECT is not allowed in cluster mode
在这里插入图片描述

这是因为redis集群版不支持多数据库空间。单机下的Redis可以支持16个数据库,集群模式下只能使用一个数据库空间,即db0。其他的db都会返回错误。

5、测试redis数据写入与数据读取
在redis目录下执行命令redis-cli –c –h ”地址” –p “端口号”; c 表示集群。
示例:redis-cli -c -h 127.0.0.1 -p 7000
写入数据:set name bianchengxia
在这里插入图片描述

根据redis-cluster的key值分配(Redis集群没有使用一致性hash, 而是引入了哈希槽的概念,所有的键根据哈希函数映射到 0 ~ 16383 整数槽内,每个key通过CRC16校验后对16384取模来决定放置哪个槽(Slot),每一个节点负责维护一部分槽以及槽所映射的键值数据),name应该分配到节点7001上,上面显示redis cluster自动从7000跳转到了7001节点。
我们可以测试一下7001从节点获取name值(实际每个节点都可以取到值,redis自动切换到对应key所在的节点)
在这里插入图片描述
在这里插入图片描述

三、项目集成测试
1、项目配置
以Springboot项目为例,在application.properties中配置redis

spring.redis.cluster.nodes=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

在这里插入图片描述

若是application.yml配置方式,则按照如下方式配置
在这里插入图片描述

2、SpringBootTest单元测试

import javax.annotation.PostConstruct;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisTest {

	@Autowired
	StringRedisTemplate redisTemplate;

	ValueOperations<String, String> stringRedis;

	@PostConstruct
	public void init(){
		stringRedis=redisTemplate.opsForValue();
	}


	@Test
	public void testString (){
		stringRedis.set("name2", "编程侠");
		System.out.println(stringRedis.get("name2"));
	}
}

执行结果:
在这里插入图片描述

通过可视化工具查看:

在这里插入图片描述

通过命令查看:
在这里插入图片描述

中文存在编码问题,解决办法,redis-cli 后面加上–raw
执行命令:redis-cli -c -h 127.0.0.1 -p 7000 --raw
在这里插入图片描述

我用的windows cmd,设置–raw之后还是乱码,因为要设置窗口的编码,回到redis目录下,输入:chcp 65001,这句命令就是换成UTF-8代码页,会提示Active code page: 65001。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值