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
    评论
天猫商城是一个基于SSM框架的综合性B2C电商平台,需求设计主要参考天猫商城的购物流程:用户从注册开始,到完成登录,浏览商品,加入购物车,进行下单,确认收货,评价等一系列操作。 作为模拟天猫商城系统的核心组成部分之一,采用SSM框架的天猫数据管理后台包含商品管理,订单管理,类别管理,用户管理和交易额统计等模块,实现了对整个商城的一站式管理和维护。本课程是一门专业的Java微服架构开发实战课程,主要讲解了当下流行的SpringBoot框架、SpringCloud架构以及与第三方技术整合开发实战内容。通过本课程的学习,能够理解并掌握SpringBoot的基础知识,同时能够掌握SpringBoot与常用的第三方技术整合实现实际开发中的业务需求,包括实现Web开发、数据访问、缓存管理、安全管理、消息服务、任务管理等;了解并掌握SpringCloud微服务架构的基础知识及相关组件的应用,掌握微服务架构在企业级开发的实践,建立起微服架构思想。项目技术栈:采用SpringBoot简化商城系统的初始搭建以及开发过程采用SpringMVC+Spring+IBatis完成项目的整合采用Mysql作为数据库存储,Druid配置数据库连接池采用SpringCloud+Netflix 微服务技术栈的实战开发使用Redis完成缓存的数据存储,搭建Redis搭建主从、哨兵、集群应用,保证Redis的高可用使用ElasticSearch全文检索系统进行商品数据搜索,使用ElasticSearch搭建搜索服务的高可用使用Ngnix实现页面动静分离与负载均衡的配置采用FastDFS文件储存系统文件存储,完成广告图片、商品图片的上传和存储系统使用采用CAS+shiro单点登录系统实现用户认证使用ECharts根据后台查询数据生成图表使用POI实现了商城盈利状况的Excel表格导出。商品的详情页使用Thymeleaf完成页面静态化,减少页面数据展示延迟项目中使用SpringBoot下的Aop + 自定义注解完成用户行为记录,日志采集后台管理系统使用Shiro实现登录验证和权限管理(超级管理员、管理员、产品编辑员)项目整合微信完成订单的支付使用Redission完成分布式锁,生成订单的编号使用SpringCloud Alibaba Seat完成下订单模块的分布式事务(新增订单表,库存减少,库存超卖设计)使用RabbitMQ 做消息队列,完成订单未支付自动取消和模块直接的解耦合使用Quartz任务调度,完成缓存的定时刷新,保证缓存的一致性使用本地消息表机制完成消息然队列RabbitMQ消息可靠性传输订单支付模块使用微信扫码支付,并设置订单超时自动取消通过Jquery实现前端校验,通过基于Hibernate的Valida注解实现后端的校验功能使用Base64编码对Json数据传输进行编码和解码项目使用RESTful设计风格实现资源的访问,实现前后端分离项目使用聚合数据第三方短信平台完成用户的登陆功能项目使用SpringBoot整合JavaMail完成邮件的发送项目使用SpringBoot整合Swagger2生成接口文档使用PostMan完成接口的测试项目的测试:SpringTest、dbunit、EasyMock使用Docker 进行应用的自动化打包和发布、自动化测试和持续集成、部署和调整其他应用使用 PowerDesigner,完成数据库的建模项目使用禅道进行BUG管理环境采用Maven实施多模块项目构建,采用Git进行项目版本管理 架构解读:  项目部分截图:              讲义部分截图:          

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值