Redis概述与Redis集群(二)


4、Jedis链接redis服务器

4.1 项目结构

  须要导入两个包。java

项目结构
jedis

4.2 Jedis链接redis服务端

package com.xkt.jedis;

import java.util.Set;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import redis.clients.jedis.Jedis;

/**
 * @author lzx
 *
 */
public class JedisTest {

	private Jedis jedis = null;

	/**
	 * new Jedis(host, port, timeout);
	 * 
	 * host redis所在服务器地址 port 端口 默认6379 timeout 链接超时时间,默认5s
	 * 
	 * 链接reids注意事项: (1)防火墙问题 (2)Ip绑定。把Redis的配置文件redis.conf里的bind localhost(或者bind
	 * 127.0.0.1,代表只有该主机才能访问)注释掉。 (3)protected-mode保护模式 若是碰到,将protected-mode改为no便可。
	 */
	@Before
	public void before() {
		// 一、建立客户端Jedis
		jedis = new Jedis("192.168.109.3", 6379, 5);

		// 2.指定密码
		jedis.auth("1234");
	}

	@After
	public void after() {
		// 关闭资源
		if (null != jedis) {
			jedis.close();
		}
	}

	/**
	 * 测试链接
	 */
	@Test
	public void testConn() {

		String pong = jedis.ping();
		System.out.println(pong);
	}

	/**
	 * 得到全部key
	 */
	@Test
	public void getAllKeys() {

		Set<String> keys = jedis.keys("*");
		for (String key : keys) {
			System.out.println(key);
		}
	}
}

链接reids注意事项:node

  • 防火墙问题
  • Ip绑定。把Redis的配置文件redis.conf里的bind localhost(或者bind 127.0.0.1,代表只有该主机才能访问)注释掉。
  • protected-mode保护模式 若是碰到,将protected-mode改为no便可。

5、Redis集群

5.1 Redis集群简介

  所谓的集群,就是经过添加服务器的数量,提供相同的服务,从而让服务器达到一个稳定、高效的状态。redis

  1. redis集群中,每个redis称之为一个节点。
  2. redis集群中,有两种类型的节点:主节点(master)、从节点(slave)。
  3. redis集群,是基于redis主从复制实现。

5.2 主从复制

5.2.1 主从复制是什么

  • 主从复制模型中,有多个redis节点。
  • 其中,有且仅有一个为主节点Master。从节点Slave能够有多个。
  • 只要网络链接正常,Master会一直将本身的数据更新同步给Slaves,保持主从同步。
模型

5.2.2 主从复制的特色

  1. 主节点Master可读、可写.
  2. 从节点Slave只读。(read-only)
  • 所以,主从模型能够提升读的能力,在必定程度上缓解了写的能力。由于能写仍然只有Master节点一个,能够将读的操做所有移交到从节点上,变相提升了写能力。

5.3 Redis-cluster集群

  这里咱们介绍Redis-cluster集群,由于哨兵模式当并发写请求较大时,哨兵模式并不能缓解写压力。数据库

  咱们知道只有主节点才具备写能力,那若是在一个集群中,可以配置多个主节点,是否是就能够缓解写压力了呢?这就引出了咱们的redis-cluster集群模式ruby

5.3.1 Redis-cluster集群概念

  1. 由多个Redis服务器组成的分布式网络服务集群;
  2. 集群之中有多个Master主节点,每个主节点均可读可写;
  3. 节点之间会互相通讯,两两相连;
  4. Redis集群无中心节点。
图示

5.3.2 集群节点复制

图示
  • 在Redis-Cluster集群中,能够给每个主节点添加从节点,主节点和从节点直接遵循主从模型的特性。服务器

  • 当用户须要处理更多读请求的时候,添加从节点能够扩展系统的读性能。网络

5.3.3 故障转移

  Redis集群的主节点内置了相似Redis Sentinel的节点故障检测和自动故障转移功能,当集群中的某个主节点下线时,集群中的其余在线主节点会注意到这一点,并对已下线的主节点进行故障转移。并发

图示

  集群进行故障转移的方法和Redis Sentinel进行故障转移的方法基本同样,不一样的是,在集群里面,故障转移是由集群中其余在线的主节点负责进行的,因此集群没必要另外使用Redis Sentinel。分布式

5.3.4 集群分片策略

  • Redis-cluster分片策略,是用来解决key存储位置的。函数

  • 集群将整个数据库分为16384个槽位slot,全部key-value数据都存储在这些slot中的某一个上。一个slot槽位能够存放多个数据,key的槽位计算公式为:slot_number=crc16(key)%16384,其中crc16为16位的循环冗余校验和函数。

  • 集群中的每一个主节点均可以处理0个至16383个槽,当16384个槽都有某个节点在负责处理时,集群进入上线状态,并开始处理客户端发送的数据命令请求。

图示

5.3.5 集群redirect转向

  • 因为Redis集群无中心节点,请求会随机发给任意主节点;
  • 主节点只会处理本身负责槽位的命令请求,其它槽位的命令请求,该主节点会返回客户端一个转向错误;
  • 客户端根据错误中包含的地址和端口从新向正确的负责的主节点发起命令请求。
图示

6、Redis-cluster集群搭建

6.1 准备工做

  1. 安装ruby环境
  • yum -y install ruby
  • yum -y install rubygems
  1. 安装ruby和redis的接口程序

  拷贝redis-3.0.0.gem至/usr/local下,执行安装:

  • gem install /usr/local/redis-3.0.0.gem

6.2 集群规划

  1. Redis集群最少须要6个节点,能够分布在一台或者多台主机上。 咱们测试采用一台主机上建立伪分布式集群,不一样的端口表示不一样的redis节点,以下:
  • 主节点:192.168.56.3:7001 192.168.56.3:7002 192.168.56.3:7003

  • 从节点:192.168.56.3:7004 192.168.56.3:7005 192.168.56.3:7006

  1. 在/usr/local/redis下建立redis-cluster目录,其下建立700一、7002。。7006目录([root@node redis-cluster]# mkdir 7001 7002 7003 7004 7005 7006),以下:
图示
  1. 将redis解压路径下的配置文件redis.conf,依次拷贝到每一个700X目录内,并修改每一个700X目录下的redis.conf配置文件:
  • 修改bind 为了其余机器也能够访问
  • cluster-enabled yes 支持集群
  • daemonized yes 后台启动
  • logfile /usr/local/redis/redis-cluster/700X/node.log

  1>必选配置:

  • port 700X
  • bind 192.168.56.3
  • cluster-enabled yes   2>建议配置:
  • daemonized yes
  • logfile /usr/local/redis/redis-cluster/700X/node.log

6.3 启动每一个结点redis服务

  1. 依次以700X下的redis.conf,启动redis节点。(必须指定redis.conf文件) 到各自文件夹下启动,不然可能启动不了
  • redis-server /usr/local/redis/redis-cluster/700X/redis.conf

6.4 执行建立集群命令

  1. 进入到redis源码存放目录redis/redis-4.10.3/src下,执行redis-trib.rb
  • ./redis-trib.rb create --replicas 1 192.168.56.3:7001 192.168.56.3:7002 192.168.56.3:7003 192.168.56.3:7004 192.168.56.3:7005 192.168.56.3:7006
图示

6.5 查询集群信息

  1. 集群建立成功登录任意redis结点查询集群中的节点状况
  • ./redis-cli -c -h 192.168.56.3 -p 7001
图示
  1. 上面命令说明:
  • -c表示以集群方式链接redis,
  • -h指定ip地址,
  • -p指定端口号
  • 登录集群后使用如下命令:
  • cluster nodes 查询集群结点信息;
  • cluster info 查询集群状态信息。

7、java程序链接redis集群

package com.xkt.redis.test;

import java.util.HashSet;
import java.util.Set;

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

/**
 * @author lzx
 *
 */
public class Test {
	
	public static void main(String[] args) {
		//链接jediscluster客户端
		String host ="192.168.109.3";
		
		Set<HostAndPort> nodes =new HashSet<>();
		nodes.add(new HostAndPort(host, 7001));
		nodes.add(new HostAndPort(host, 7002));
		nodes.add(new HostAndPort(host, 7003));
		nodes.add(new HostAndPort(host, 7004));
		nodes.add(new HostAndPort(host, 7005));
		nodes.add(new HostAndPort(host, 7006));
		
		JedisCluster cluster = new JedisCluster(nodes);
		
		String name = cluster.hget("user:id:1", "name");
		System.out.println(name);
		
		cluster.close();
	}

}
相关文章
相关标签/搜索