windows下使用RedisCluster集群简单实例

一、开发环境

ruby环境准备

下载 64位的 RubyInstaller并安装 地址http://rubyinstaller.org/downloads/
勾选下面三个不用配置环境变量

Image.png

安装RubyGems

下载下来是一个压缩包,解压运行里面的 setup.rb 安装 rubyGems
由于墙的原因ruby自带的源有时候很慢,我们换成淘宝的源,不然下面安装redis依赖会失败。

在cmd下运行

gem sources --remove https://rubygems.org/ 删掉原来的源
gem sources -a http://ruby.taobao.org 添加淘宝源
gem sources -l 查看现有的源
gem install redis 安装redis依赖


二 、使用redis cluster

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

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

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

打印出配置信息,现在的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文件里生成了什么

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);
}

Image.png

github上有这一句,Jedis Cluster 会自动去发现集群中的节点,所以JedisClusterNodes只需要 add一个实例

运行得到结果

Image.png

接下来用redis客户端看看这两个key=1417 、key=288的值存到哪个节点下
看回最初的配置

Image.png

key=288算出来的 CRC16校验和是 4258,根据配置 应该存在 7000这台机上
key=1417 算出来的 CRC16校验和是 13096,根据配置 应该存在 7002 这台机上

用redis 客户端查看数据存到哪台机器上

Image.png

进去7000这台机上
get 288拿到了value bar2
get 1417 得到提示让去 7002这台机查

从redis客户端看到的结果与配置一致

四、简单集成Spring

JedisFactory类
传入host 、port 和JedisPoolConfig 类

package your path;
import java.util.HashSet;
import java.util.Set;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;

/**
 * <p>Title: JedisClusterFactory.java</p>
 * <p>Description: </p>
 * @author qiaowei liu
 * @date 2016-1-14
 * @version 1.0
 */
public class JedisClusterFactory {

/**
 * @Description
 * @author qiaowei liu
 * @date 2016-1-14 上午11:00:18
 * @param args
 */

private JedisCluster jedisCluster;

public JedisCluster getJedisCluster() {
    return jedisCluster;
}

public JedisClusterFactory(JedisPoolConfig jedisPoolConfig,String host,int port){
    Set<HostAndPort> jedisClusterNodes= new HashSet<HostAndPort>();
    //Jedis Cluster will attempt to discover cluster nodes automatically
    jedisClusterNodes.add(new HostAndPort(host,port));
    jedisCluster=new JedisCluster(jedisClusterNodes,jedisPoolConfig);
}
}

JedisProvide.java工具类,主要是封装些常用的操作

package your path;
import your path.CacheSecondLevel;
import redis.clients.jedis.JedisCluster;

/**
 * <p>Title: RedisProvide.java</p>
 * <p>Description: </p>
 * @author qiaowei liu
 * @date 2016-1-8
 * @version 1.0
 */
public class RedisProvide implements CacheSecondLevel {

private JedisCluster jedisCluster;

public RedisProvide(JedisClusterFactory jedisClusterFactory){
       jedisCluster=jedisClusterFactory.getJedisCluster();
}

@Override
public Object get(String key){
    return jedisCluster.get(key);
}

@Override
public Object[] gets(String[] keys) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public void set(String key, Object obj) {
    // TODO Auto-generated method stub
    jedisCluster.set(key, obj.toString());
}

@Override
public void delete(String key) {
    // TODO Auto-generated method stub
    jedisCluster.del(key);
}
}

applicationContext.xml配置

 <!--==================== redis配置 start ====================-->
 <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
      <property name="maxTotal"  value="${redis.maxTotal}" />
    <property name="maxIdle" value="${redis.maxIdle}" />
     <property name="timeBetweenEvictionRunsMillis" value="${redis.timeBetweenEvictionRunsMillis}" />
    <property name="minEvictableIdleTimeMillis" value="${redis.minEvictableIdleTimeMillis}" />
    <property name="testOnBorrow" value="${redis.testOnBorrow}" />
 </bean>

 <bean id="jedisClusterFactory" class="xxx.xxx.JedisClusterFactory" >
    <constructor-arg  ref ="jedisPoolConfig"/>
    <constructor-arg  name="host" value="${redis.host}"/>
    <constructor-arg  name="port" value="${redis.port}"/>
 </bean>

 <bean id="redisProvide" class="xxx.xxx.RedisProvide">
    <constructor-arg  ref ="jedisClusterFactory" />
 </bean>
<!--==================== redis配置 end ====================-->

conf/perproties

#redis config
redis.host=127.0.0.1
redis.port=7000
redis.timeout=100000
redis.maxIdle=300
redis.maxTotal=600
redis.timeBetweenEvictionRunsMillis=30000
redis.minEvictableIdleTimeMillis=30000
redis.testOnBorrow=true
				
时间: 2024-10-03 14:42:09

windows下使用RedisCluster集群简单实例的相关文章

ruby-2.4.6和redis-4.1.3.gem环境下的redis-cluster集群中的bug

bug场景说明:ruby-2.4.6和redis-4.1.3.gem环境下的redis-cluster集群中,在移除redis-cluster集群中含有数据的节点时出现的bug.下面详细说明下bug出现的场景. redis-cluster移除节点:和节点添加一样,移除节点也有移除主节点,从节点. 1.移除主节点 移除节点使用redis-trib的del-node命令, redis-trib del-node 127.0.0.1:7002 ${node-id} 127.0.0.1:7002是red

windows下hadoop的集群分布式部署

下面我们进行说明一下hadoop集群的搭建配置. 本文假设读者具有hadoop单机配置的基础,相同的部分不在重述. 以三台测试机为例搭建一个小集群,三台机器的ip分别为 192.168.200.1;192.168.200.2;192.168.200.3 cygwin,jdk的安装同windows下hadoop的单机伪分布式部署(1),这里略过. 1.配置 hosts 在三台机子的hosts文件中加入如下记录: 192.168.200.1 hadoop1  #master namenode 192

windows下安装redis集群

前几天在自己在本机win10 电脑下部署了redis集群. 主要通过的是网上两个博客: 如何在windows下部署redis集群:https://blog.csdn.net/zsg88/article/details/73715947 redis的一些操作:https://blog.csdn.net/mlc1218559742/article/details/52640180 原文地址:https://www.cnblogs.com/tuanz/p/9359037.html

Windows下搭建Redis集群

Redis集群:运行多个Redis实例,然后通过特定的工具,将这些实例以某种关系连接起来,形成一个Redis网络. 详细的内容可以阅读:Redis 集群教程 里面会详细介绍Redis集群的设计思想和内部结构,以及如何搭建Redis集群等. 本文主要讲述如何在Windows系统下快速搭建Redis集群: 1.下载Redis 其GitHub连接如下:https://github.com/MSOpenTech/redis/releases/ Redis提供msi和zip格式的下载文件,这里下载zip格

Windows 下搭建RabbitMQ集群

RabbitMQWindows集群操作 1.下载Erlang程序,可以在http://www.erlang.org/download.html这个地方找到最新的Erlang/OTP 2.安装rabbitmq-server-windows程序,下载http://www.rabbitmq.com/server.html. 3.分别在每个集群机器上面配置hosts文件,里面是机器的IP地址和机器的名称 例如:192.168.1.26 rabbitmqwin1 192.168.1.40 rabbitmq

zookeeper在windows下的伪集群安装和启动

Windows下安装 把下载的zookeeper的文件解压到指定目录 E:\Program\zookeeper-3.4.6 修改conf下增加zoo1.cfg,zoo2.cfg,zoo3.cfg # The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial  # synchronization phase can take initLimit=10 # The numb

Elasticsearch集群 windows下部署ES集群,多台服务器

? 针对于Elasticsearch集群部署基本上就是一些配置就可以解决的,我们这块简单称为(ES). ES下载地址为:https://www.elastic.co/cn/downloads/past-releases 如果不能下载,可以转至https://download.csdn.net/download/weixin_41986096/11635439 进行下载. 下来选择盘符建立es-cluster文件夹,名称可以随意替换,我们将es复制3份,分别如下图所示(伪集群部署方式) ? 然后打

windows下创建h2集群,及java集成详细步骤

1.下载h2包,解压 2.cmd操作,进入bin目录 3.创建两个目录 4.建立集群 输入以下命令(需要进入h2的bin目录) java -cp "h2-1.4.195.jar;%H2DRIVERS%;%CLASSPATH%" org.h2.tools.Server -tcpAllowOthers -tcpPort 9101 -webAllowOthers -webPort 8081 -baseDir D:\database\h2Cluter\h2_1 java -cp "h

Redis → Windows下搭建redis集群

一,redis集群介绍 Redis cluster(redis集群)是在版本3.0后才支持的架构,和其他集群一样,都是为了解决单台服务器不够用的情况,也防止了主服务器宕机无备用服务器,多个节点网络互联数据共享,所有节点都是一主一从(也可以一主多从),其中不提供服务,只做为备份,emmm我就不多说废话了,直接进入主题. 没有多的服务器就只能单机搭建集群了 原文地址:https://www.cnblogs.com/BalmyLee/p/12019398.html