redis如何建集群详解实例测试讲解以及使用java连接redis集群

redis集群

文章目录

  • redis集群
    • 一、集群简介
      • 现状问题
      • 集群架构
      • 集群作用
    • 二、Cluster集群结构搭建
      • 搭建方式
      • Cluster配置
    • 三、配置redis集群实例
      • 1.安装配置redis
      • 2.安装配置工具
      • 3.启动每一个节点并执行集群构建脚本
      • 4.测试一下
    • 四、使用idea连接redis集群

一、集群简介

现状问题

业务发展过程中遇到的峰值瓶颈

  • redis提供的服务OPS可以达到10万/秒,当前业务OPS已经达到10万/秒
  • 内存单机容量达到256G,当前业务需求内存容量1T
  • 使用集群的方式快速解决上述问题

集群架构

  • 集群就是使用网络将若干台计算机联通起来,并提供统一的管理方式,使其对外呈现单机的服务效果

集群作用

  • 分散单台服务器的访问压力
  • 分散单台服务器的存储压力,实现可拓展性
  • 降低单台服务器宕机带来的业务灾难

二、Cluster集群结构搭建

搭建方式

  • 原生命令(单条命令)
    • 创建服务器(3主3从)
    • 建立通信(Meet)
    • 分槽(slot)
    • 搭建主从(master-slave)
  • 工具安装(批处理)

Cluster配置

  • 配置节点
cluster-enableed yes|no
  • cluster配置文件名,该文件属于自动生成,仅用于快速查找文件并查询文件内容
cluster-config-file 
  • 节点服务响应超时时间,用于判断该节点是否下线或切换从节点
cluster-node-timeout 
  • master连接slave最小数量
cluster-migration-barrier 

三、配置redis集群实例

所需软件:Redis、Ruby语言环境、redis的Ruby驱动redis-xxxx.gem

1.安装配置redis

①创建文件夹

  • 百度直接下载redis压缩包
  • 创建一个redis集群的文件夹
  • 将下载后的redis压缩包解压至redis集群的文件夹,并复制5份,一共6份,作为三主三从集群

②修改端口

  • 分别打开这6个redis的redis.windows.conf文件,修改port为6379、6380、6381、6382、6383和6384。

③配置密码

  • 分别设置requirepass 123456masterauth 123456

④修改cluster配置

  • cluster-enabled yes前面#号删掉
  • cluster-config-file nodes-6379.conf前面#号删掉,对应端口命名
  • cluster-node-timeout 15000前面的#号删掉
  • appendonly no设置为appendonly yes
    解释:

如果cluster-enabled 不为yes, 那么在使用JedisCluster集群代码获取的时候,会报错。
cluster-node-timeout 调整为 15000,那么在创建集群的时候,不会超时。 cluster-config-file
nodes-6379.conf 是为该节点的配置信息,这里使用 nodes-端口.conf命名方法。服务启动后会在目录生成该文件。

⑤新建一个启动startRedis.bat文件

title Redis-6379
redis-server redis.windows.conf

⑥分发redis.windows.conf配置文件和startRedis.bat文件

  • 将这两个文件分发至另外5个文件夹
  • 修改redis.windows.conf里面的port对应端口
  • 修改redis.windows.conf里面的cluster-config-file nodes-6379.conf对应端口
  • 修改startRedis.bat文件的title对应端口

2.安装配置工具

在redis集群的文件夹下新建一个工具文件夹

①下载安装1、rubyinstaller-3.0.1-1-x64.exe

  • 傻瓜式安装,挑选好安装路径即可,一直下一步

②下载安装Rubygems

  • 下载解压之后,打开cmd至该目录下
D:\redis\redis集群\工具\安装路径\rubygems\rubygems-3.2.17>
  • 执行 ruby setup.rb
  • 执行gem install redis

3.启动每一个节点并执行集群构建脚本

①启动redis

  • 分别启动6个startRedis.bat文件
    发现对应的appendonly.aof文件和nodes-端口.conf都已经生成。
  • 打开一个端口文件目录下打开cmd
D:\redis\redis集群\Redis-x64-5.0.10-6379-6379>
  • 执行redis-cli --cluster create 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 --cluster-replicas 1 -a 123456
  • 在出现 Can I set the above configuration? (type ‘yes’ to accept): 请确定并输入 yes 。
    看到执行成功的提示语句。
    解释下:

cluster-replicas是指以集群的方式
1 是指数据库数量

4.测试一下

在随便6个文件夹下打开cmd运行redis-cli -h 127.0.0.1 -p 6379 -c -a 123456
输入dbsize查询 记录总数

输入cluster info可以从客户端的查看集群的信息
输入cluster nodes查询每个节点的信息,可以查看主从关系
输入info replication可以查询该端口的角色和地址等信息
解释一下

使用Redis客户端Redis-cli.exe来查看数据记录数,以及集群相关信息 命令 redis-cli –c –h ”地址” –p
“端口号” ; c 表示集群 -a 认证

更多详细内容笔记
笔记

四、使用idea连接redis集群

测试代码如下:

package com.hkd.test1;

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;

import java.util.LinkedHashSet;
import java.util.Set;

public class test1 {
    public static void main(String[] args) {
        Set nodes=new LinkedHashSet<>();
        //一般选用slaveof从IP+端口进行增删改查,不用master
        /*nodes.add(new HostAndPort("127.0.0.1",6379));
        nodes.add(new HostAndPort("127.0.0.1",6380));
        nodes.add(new HostAndPort("127.0.0.1",6381));*/
        nodes.add(new HostAndPort("127.0.0.1",6382));
        nodes.add(new HostAndPort("127.0.0.1",6383));
        nodes.add(new HostAndPort("127.0.0.1",6384));

        //Jedis连接池配置
        JedisPoolConfig jedisPoolConfig=new JedisPoolConfig();
        //最大空闲连接数,默认8个
        jedisPoolConfig.setMaxIdle(500);
        //最大连接数,默认8个
        jedisPoolConfig.setMaxTotal(500);
        //设置最小空闲连接数,默认0
        jedisPoolConfig.setMinIdle(0);
        // 获取连接时的最大等待毫秒数(如果设置为阻塞时BlockWhenExhausted),如果超时就抛异常, 小于零:阻塞不确定的时间,  默认-1
        jedisPoolConfig.setMaxWaitMillis(2000);//设置2秒
        //对拿到的connection进行validateObject校验
        jedisPoolConfig.setTestOnBorrow(true);
        //未设置auth Password
        //JedisCluster jedis = new JedisCluster(nodes, jedisPoolConfig);
        //设置auth Password
        JedisCluster jedis = new JedisCluster(nodes, 5000, 3000, 10, "123456", new JedisPoolConfig());

         jedis.set("mykey", "测试");

        System.out.println(jedis.get("mykey"));
    }
}

你可能感兴趣的:(开发工具,redis,redis,java,数据库,分布式,ruby)