原文链接:https://blog.csdn.net/zsg88/article/details/73715947

所需软件

Redis、Ruby语言运行环境、Redis的Ruby驱动redis-xxxx.gem、创建Redis集群的工具redis-trib.rb

安装redis

redis下载地址 https://github.com/MSOpenTech/redis/releases ; 下载Redis-x64-3.2.100.zip。

集群规划有三个节点的集群,每个节点有一主一备。需要6台虚拟机。

把 redis 解压后,再复制出 5 份,配置 三主三从集群。 由于 redis 默认端口号为 6379,那么其它5份的端口可以为6380,6381,6382,6383,6384。 并且把目录使用端口号命名
在windows上搭建redis集群 - 图1

打开目录6379下有一个文件 redis.windows.conf,修改里面的端口号,以及集群支持配置。
在windows上搭建redis集群 - 图2

并修改文件中的如下配置来支持集群:
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000
appendonly yes

cluster-enabled 为yes, 开启实例的集群模式
cluster-node-timeout 调整为 15000,设置连接节点超时时间。
cluster-config-file nodes-6379.conf 是为该节点的配置信息,这里使用 nodes-端口.conf命名方法。服务启动后会在目录生成该文件。
在windows上搭建redis集群 - 图3

编写一个 bat 来启动 redis,在每个节点目录下建立 start.bat,内容如下:
title redis-6380
redis-server.exe redis.windows.conf

安装ruby环境

安装ruby

下载地址:https://rubyinstaller.org/downloads/
redis的集群使用 ruby脚本编写,所以系统需要有 Ruby 环境
在windows上搭建redis集群 - 图4

安装时3个选项都勾选。

安装redis的ruby驱动redis-xxxx.gem

下载地址 https://rubygems.org/pages/download, 下载zip后解压,当前目录切换到解压目录中,
如 E:\rediscluster\rubygems-2.7.7\rubygems-2.7.7
然后在命令行执行 ruby setup.rb。

然后通过GEM 安装 Redis :切换到redis安装目录(6379目录下),需要在命令行中,执行 gem install redis
在windows上搭建redis集群 - 图5

配置集群脚本redis-trib

下载地址 https://raw.githubusercontent.com/antirez/redis/unstable/src/redis-trib.rb

打开该链接如果没有下载,而是打开一个页面,那么将该页面保存为redis-trib.rb,建议保存到一个Redis的目录下,例如放到6379目录下。

集群的命令为(创建集群时执行)
redis-trib.rb create —replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384
—replicas 1 表示每个主数据库拥有从数据库个数为1。master节点不能少于3个,所以我们用了6个redis

启动每个节点并创建集群

把每个节点下的 start.bat双击启动, 在切换到redis(6379)目录在命令行中执行
redis-trib.rb create —replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384

在windows上搭建redis集群 - 图6
在出现 Can I set the above configuration? (type ‘yes’ to accept): 请确定并输入 yes 。成功后的结果如下:
在windows上搭建redis集群 - 图7

测试

redis-cli测试

命令 redis-cli –c –h ”地址” –p “端口号” ; c 表示集群
在windows上搭建redis集群 - 图8

在windows上搭建redis集群 - 图9

springboot 测试

  • 加入 gradle 依赖
  1. compile('org.springframework.boot:spring-boot-starter-data-redis')
  • 在 application.properties 文件中添加配置
  1. spring.redis.cluster.nodes=127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381,127.0.0.1:6382,127.0.0.1:6383,127.0.0.1:6384
  • 编写 controller 进行简单测试
  1. package com.code.springbootrediscluster.controller;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.data.redis.core.RedisTemplate;
  4. import org.springframework.data.redis.core.ValueOperations;
  5. import org.springframework.web.bind.annotation.*;
  6. import java.util.HashMap;
  7. import java.util.Map;
  8. @RestController
  9. public class RedisClusterController {
  10. @Autowired
  11. private RedisTemplate<String, String> redisTemplate;
  12. @GetMapping("/set/{key}/{value}")
  13. public Map<String, String> set(@PathVariable String key, @PathVariable String value){
  14. ValueOperations<String,String> valueOperations = redisTemplate.opsForValue();
  15. valueOperations.set(key, value);
  16. Map<String, String> map = new HashMap<String, String>();
  17. map.put(key, value);
  18. return map;
  19. }
  20. @GetMapping("/get/{key}")
  21. public Map<String, String> get(@PathVariable String key){
  22. ValueOperations<String,String> valueOperations = redisTemplate.opsForValue();
  23. String value = valueOperations.get(key);
  24. Map<String, String> map = new HashMap<String, String>();
  25. map.put(key, value);
  26. return map;
  27. }
  28. }
  • 通过浏览器测试

在windows上搭建redis集群 - 图10

在windows上搭建redis集群 - 图11

给redis设置密码(选做)

先给每个节点redis设置密码

  1. // 获取当前密码
  2. config get requirepass
  3. // 设置密码
  4. config set requirepass 123456
  5. // 通过密码登录
  6. redis-cli -c -h 127.0.0.1 -p 6379 -a 123456

在windows上搭建redis集群 - 图12

加入到springboot的配置文件中

spring.redis.database=0
spring.redis.cluster.nodes=127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381,127.0.0.1:6382,127.0.0.1:6383,127.0.0.1:6384
spring.redis.password=123456

测试可以通过。注:如果不加 redis 密码,那么在启动的时候就会报错,因为在获取 redis 连接的时候没有权限。