Redis 集群搭建、Spring Data Redis使用


linux下的Redis安装

1.第一步:先安装C的编译环境:yum install gcc gcc-c++ libstdc++-devel tcl -y
	  因为需要使用gcc进行编译才能安装Redis,Redis是基于C语言开发的。
2.第二步:查看是否安装gcc成功,输入gcc或make是否出现以下提示。

Redis 集群搭建、Spring Data Redis使用

3.第三步:可联网下载redis-4.0.10.tar.gz或其他版本的源代码包,并进行安装
	1.wget http://download.redis.io/releases/redis-4.0.10.tar.gz
	2.tar xzf redis-4.0.10.tar.gz(解压缩)
	3.cd redis-4.0.10(进入解压后目录)
	4.make(使用make命令会进行编译)
	5.make install PREFIX=/usr/local/redis(安装到/usr/local/redis目录下)

4.第四步:进入/usr/local/redis/bin目录下,查看到多个redis的命令文件

Redis 集群搭建、Spring Data Redis使用 


Redis服务器端的启动和停止

1.第一步:进入/usr/local/redis/bin目录下,有如下多个redis的命令文件

Redis 集群搭建、Spring Data Redis使用

2.第二步:
	1.前台启动模式:在当前/usr/local/redis/bin目录下启动Redis服务器的命令:./redis-server
	2.后台启动模式:(每次修改完redis.conf请重新启动Redis服务器并再次指定加载该新修改后的redis.conf) 
		1.第一步:把 /redis-3.0.0的源码安装包目录下的 redis.conf 拷贝到 /usr/local/redis/bin的安装目录下
			  cp /root/redis-3.0.0/redis.conf /usr/local/redis/bin

Redis 集群搭建、Spring Data Redis使用

		2.第二步:修改/usr/local/redis/bin/redis.conf:修改为 daemonize yes,即把原来的 no 改为 yes,设置为后台运行。
			  每次修改完redis.conf请重新启动Redis服务器并再次指定加载该新修改后的redis.conf

Redis 集群搭建、Spring Data Redis使用

		3.第三步:在当前/usr/local/redis/bin目录下同时指定redis.conf 启动Redis服务器的命令:./redis-server redis.conf
			  即Redis服务器加载并应用该redis.conf中的配置信息再进行启动。

3.第三步:查看是否启动成功 

Redis 集群搭建、Spring Data Redis使用

4.第四步:
	1.停止 前台模式下的redis服务器:ctrl + c
	2.停止 后台模式下的redis服务器:
		1.第一种方式:查看到redis-server的进程号,然后执行kill -9 进程号:ps aux|grep redis
		2.第二种方式:在/usr/local/redis/bin目录下,使用redis客户端进行停止redis服务器:./redis-cli shutdown
		3.第三种方式:执行了./redis-cli进入了redis客户端的输入模式下,执行shutdown命令也可停止redis服务器

 


Redis客户端的启动和停止 

1.第一种启动方式:在/usr/local/redis/bin目录下,执行:./redis-cli 
2.第二种启动方式:连接远程linux上的redis服务器,执行:./redis-cli -h 远程linux的IP -p 6379
		  默认连接localhost运行在6379端口的redis服务。
			-h:连接的服务器的地址
			-p:服务的端口号
3.第三种启动方式:
	1.加上--raw的作用:
		在客户端中显示查询出的中文数据时,如果以“/16进制”的形式显示中文数据的话,
		那么使用“./redis-cli --raw”在进入客户端,那么查询出的中文数据便能正常以中文字符的形式显示。
	2.例子:./redis-cli --raw
	        ./redis-cli -h 远程linux的IP -p 6379 --raw
	
4.redis客户端下使用ping命令查看redis服务器是否正常运行:

Redis 集群搭建、Spring Data Redis使用


Redis集群的搭建

1.分布式:
	1.对于处理任务来说:
		物理上是分开的,做的任务是不同的。每个服务器负责执行程序中的不同部分的任务,只要其中一个服务器宕机,便会影响整个程序的完整性。
	2.对于存储数据来说:
		每个服务器存储的数据都是不一样的

2.集群:
	1.对于处理任务来说:
		物理上是分开的,做的任务是相同的。每个服务器负责执行程序中的同一部分的任务,即使其中一个服务器宕机,也不影响整个程序的完整性。
	2.对于存储数据来说: 
		1.每个服务器存储的数据都是一样的,分为两种,主服务器和从服务器。
		  主服务器负责提供数据库数据的增删查改,从服务器负责自动备份主服务器中的数据。主服务器和从服务器存储的都是相同的数据。
		  当主服务器宕机了之后,从服务器便替换作为主服务器来使用。
		2.对于数据库进行集群来说,还可以配置主从读取分离。主服务器负责提供数据库数据的增删改,从服务器负责提供数据库数据的查询。
		  主服务器和从服务器还涉及到同步相关配置。

Redis 集群搭建、Spring Data Redis使用


Redis集群:redis-cluster架构图

Redis 集群搭建、Spring Data Redis使用

Redis 集群搭建、Spring Data Redis使用

1.所有的redis节点是互相联通自动传输数据的,所以客户端只要连接到任意一个redis节点上即能获取redis集群下的数据库中的任意数据。
2.搭建主、从的Redis集群中:
	1.所有的每个主的Redis节点负责互相自动传输数据,而每个Redis节点存储的都是不同的数据。
	  而每个主的Redis节点后面都可以连接一个或多个从的Redis节点,每个从的Redis节点只负责备份对应的主的Redis节点中的数据。
	2.当某一个主的Redis节点失效之后,该主的Redis节点对应的从的Redis节点便充当新的主Redis节点的作用。
3.Redis集群中一共内置了16384个哈希槽slot,假如当前Redis集群中有3个Redis节点,
  那么首先便会把 16384个哈希槽slot平均地自动分配并映射到对应的其中一个Redis节点上;当客户端要向Redis集群中存储键值对数据时,
  首先会根据crc16算法计算出该键值对中的key对应的是哪个哈希槽slot,然后根据“该键值对中的key对应的”哈希槽slot所映射的是哪个Redis节点,
  最终把该键值对存储到“哈希槽slot所映射到的”那个Redis节点上。
1.所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽 。
2.某个redis节点的失效是通过集群中超过半数的节点共同检测,认为该redis节点失效了时,就会使用该失效的redis节点的备份(从的redis服务器节点),
  此时的从的redis服务器节点相当于替换作为新的主的redis节点,而从的redis服务器节点平时负责备份主的redis服务器节点中的数据。
3.client客户端与redis节点直连,不需要中间proxy层,客户端不需要连接redis集群中的所有节点,客户端只需要连接redis集群中的任何一个可用节点即可。
4.redis-cluster把所有的物理节点映射到[0-16383]slot(哈希槽)上,redis-cluster负责维护 redis节点node <---> 哈希槽slot  <--->  数据值value
5.Redis集群中内置了 16384 个哈希槽slot,当需要在 Redis集群中存储一个 key-value键值对数据时,
  redis 先对 key 使用 crc16 算法算出一个结果值,然后把该结果值对 16384 进行求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,
  redis 会根据节点数量 大致均等地 将哈希槽映射到不同的redis节点上,然后把该键值对数据存储到“对应的哈希槽所映射到的”redis节点上。

Redis集群之搭建步骤

1.第一步:
	  首先需要确定Redis集群多少个Redis节点。
	  一般推荐至少集群3个或3个以上的Redis节点。
	  原因:集群中只有2个Redis节点的话,因为集群之间当有某一个Redis节点失效了的话,
	        是需要集群中超过半数的Redis节点进行投票判断该某个Redis节点是否失效了,所以如果只有集群中只有2个Redis节点的话,
		其中一个Redis节点失效了之后,只剩下一个有效节点的话,是无法达到“超过半数的Redis节点进行投票判断”的条件的,
		所以要求在搭建Redis集群中应至少集群3个或3个以上的Redis节点才符合要求。

2.第二步:
	确定Redis集群中每个“主”Redis节点都应该至少拥有一个“从”Redis节点以上,那么不仅能保证“从”Redis节点随时备份“主”Redis节点中的数据,
 	并且能保证当“主”Redis节点失效了之后,会有对应的一个“从”Redis节点加入到Redis集群中,替代失效的“主”Redis节点,
	否则整个Redis集群就会缺少部分数据库数据,而无法达到真正集群的效果和要求。

3.第三步:
	因为至少需要配置 3个“主”Redis节点,而每个“主”Redis节点还需要配置 1个“从”Redis节点,所以一共需要配置 6个Redis节点,
	而每个Redis节点都部署在不同的服务器上的话,则需要6台服务器,也即6台虚拟机。

模拟搭建一个伪的Redis集群

此处模拟搭建一个伪的Redis集群:
	在一个服务器中的一个虚拟机上,配置开启6个不同的Redis节点服务器,每个Redis节点服务器单独使用一个端口,
	一共配置7001~7006的6个端口。

1.第一步:
	/usr/local目录下 创建一个redis-cluster的文件夹,该redis-cluster文件夹下创建 6个分别叫做redis01~redis06的文件夹。
	然后redis01~redis06的每个文件夹中,都拷贝一份“/usr/local/redis/bin”(Redis安装目录)下所有的文件。
	还需要保证redis01~redis06的bin目录中都没有 dump.rdb 和 appendonly.aof 两个持久化数据文件,保证数据库是干净的空的。
	命令:	cd /usr/local
		mkdir /usr/local/redis-cluster/redis01
		mkdir /usr/local/redis-cluster/redis02
		mkdir /usr/local/redis-cluster/redis03
		mkdir /usr/local/redis-cluster/redis04
		mkdir /usr/local/redis-cluster/redis05
		mkdir /usr/local/redis-cluster/redis06
		cp -r /usr/local/redis/bin /usr/local/redis-cluster/redis01 
		cp -r /usr/local/redis/bin /usr/local/redis-cluster/redis02 
		cp -r /usr/local/redis/bin /usr/local/redis-cluster/redis03 
		cp -r /usr/local/redis/bin /usr/local/redis-cluster/redis04  
		cp -r /usr/local/redis/bin /usr/local/redis-cluster/redis05 
		cp -r /usr/local/redis/bin /usr/local/redis-cluster/redis06 
 
	redis01~redis06的每个bin目录下的文件详情如下:

Redis 集群搭建、Spring Data Redis使用

2.第二步:
	修改redis01~redis06的每个bin目录下的redis.conf配置文件:
		1.修改端口号(45行):6379的端口号 分别修改为7001~7006

Redis 集群搭建、Spring Data Redis使用

		2.开启支持集群模式(632行):cluster-enabled yes
				默认是被注释掉的,取消注释,即集群模式

Redis 集群搭建、Spring Data Redis使用

3.第三步:
	1.批处理连续启动6个Redis节点服务器,启动之前先保证没有多余的Redis服务器已经启动了。
	2.创建一个redis-start.sh批处理文件,放到/usr/local/redis-cluster/目录下。
redis-start.sh内容如下:
#!/bin/bash
cd redis01/bin/
./redis-server redis.conf
cd ../..
cd redis02/bin/
./redis-server redis.conf
cd ../..
cd redis03/bin/
./redis-server redis.conf
cd ../..
cd redis04/bin/
./redis-server redis.conf
cd ../..
cd redis05/bin/
./redis-server redis.conf
cd ../..
cd redis06/bin/
./redis-server redis.conf
cd ../..

shell脚本:
1.第一步:shell脚本中的第一行为:#!/bin/bash
2.第二步:shell脚本如果是在window编辑创建的,那么shell脚本的格式实际为dos,执行“vi shell脚本名”,
          然后执行“:set ff”查看到脚本的格式实际为dos,然后执行“:set ff=unix”,
	  把么shell脚本的格式修改为了unix。
3.第三步:修改脚本的执行权限,执行“chmod 777 shell脚本名”
4.第四步:执行脚本“./shell脚本名”
	3.chmod 777 redis-start.sh:修改脚本的执行权限
          ./redis-start.sh:执行redis-start.sh 批处理文件,开启6个7001~7006端口的Redis节点服务器

 	4.ps aux|grep redis-server

Redis 集群搭建、Spring Data Redis使用

4.第四步:使用ruby脚本搭建Redis集群,首先需要安装ruby的运行环境
	1.第一步:安装 ruby环境 
		1.执行 yum install ruby
		2.执行 yum install rubygems

	2.第二步:ruby脚本运行redis-3.0.0.gem包 
		  执行 gem install redis-3.0.0.gem 

Redis 集群搭建、Spring Data Redis使用

	3.第三步:进入到 /root/redis-3.0.0/src/的源码包目录下,把 redis-trib.rb脚本文件 拷贝到/usr/local/redis-cluster/下
		  命令:cp /root/redis-3.0.0/src/redis-trib.rb /usr/local/redis-cluster/
 
	4.第四步:使用ruby执行redis-trib.rb脚本文件 进行搭建Redis集群
		  1.执行的命令:./redis-trib.rb create --replicas 1 192.168.25.133:7001 192.168.25.133:7002 192.168.25.133:7003 192.168.25.133:7004 192.168.25.133:7005 192.168.25.133:7006
		  2.“create --replicas 1”命令中的“1”:表示每个“主”Redis节点后面都有一个“从”Redis节点
		  3.“./redis-trib.rb create --replicas 从节点数”命令后面还要拼接上所有每个的Redis节点服务器的“IP:端口”,
		     每个“IP:端口”之间使用空格隔开。

Redis 集群搭建、Spring Data Redis使用

Redis 集群搭建、Spring Data Redis使用


Redis集群之使用:Redis客户端连接Redis集群的服务器,进行存储数据

1.使用任意一个redis01~redis06下的bin目录中的rendis-cli客户端 连接 Redis集群下的任意一个Redis节点服务器 都可以进行 正常的存储/获取数据。
2.rendis-cli -p 端口 -c:
	1.rendis-cli -p 7001~7006中的任意一个端口。
	2.-c:表示进行集群链接。

3.rendis-cli -p “主”Redis节点服务器的端口 -c:
	每个“主”Redis节点服务器已分配好哈希槽slot,自动把键值对存储到“哈希槽slot所映射到的”那个“主”Redis节点服务器中。
 
4.rendis-cli -p “从”Redis节点服务器的端口 -c:
	每个“从”Redis节点服务器 都不拥有任何的哈希槽slot,所以往“从”Redis节点服务器中存储数据时,
	会自动转为把键值对存储到“哈希槽slot所映射到的”那个“主”Redis节点服务器中。

Redis 集群搭建、Spring Data Redis使用


Spring Data Redis 连接 Redis集群

Redis 集群搭建、Spring Data Redis使用

Redis 集群搭建、Spring Data Redis使用

Redis 集群搭建、Spring Data Redis使用

Redis 集群搭建、Spring Data Redis使用

Redis 集群搭建、Spring Data Redis使用

Redis 集群搭建、Spring Data Redis使用

Redis 集群搭建、Spring Data Redis使用

Redis 集群搭建、Spring Data Redis使用

Redis 集群搭建、Spring Data Redis使用