redis集群

Redis集群

服务器的容量不足或者进行并发写操作的用户过多等情况下可以使用多台Redis集群的方式缓解压力。

缺点:不支持多键操作(如mset命令会操作失败)、不支持多键的Redis事务、不支持lua脚本

以电商项目的用户、订单、商品三个模块来演示代理主机和无中心化集群。如下图:

在这里插入图片描述

客户端通过何种方式知道需要去请求哪个服务

1:新增代理服务器

请求到代理服务器,由代理服务器进行转发

局部可以使用主从模式,如果其中某一台Redis服务器挂掉,从机上位变为主服务器继续提供服务

缺点:会多两个服务器,搭建维护不易

在这里插入图片描述

2:无中心化搭建Redis集群

任何一台Redis服务器都可以作为集群的入口。比如要访问订单数据,通过用户服务器进入集群,用户服务器会在集群内部把请求进行转移,直到找到订单服务器。

和新增代理服务器相比,明显简单很多

在这里插入图片描述

Redis集群搭建

在Linux服务器中新建一个myredis文件夹

mkdir myredis

创建6个redis实例,端口号为:6379、6380、6381、6389、6390、6391

vim redis6379.conf

  • 6379为主机,6389为从机
  • 6380为主机,6390为从机
  • 6381为主机,6391为从机

在每个服务器中配置文件:

注意修改端口号

include /myredis/redis.conf   #引入公共部分
pidfile /var/run/redis_6380.pid   #配置pid文件位置
port 6380  #配置端口号
dbfilename dump6380.rdb  #配置rdb文件名称
masterauth 123456   #配置redis密码授权(如果redis设置了密码,需要进行该设置)
cluster-enabled yes  #开启集群模式
cluster-config-file nodes-6379.conf #设置节点配置文件名称
cluster-node-timeout #配置失联节点时间,超过指定毫秒,主从进行切换

启动6个Redis服务

redis-server redis6379.conf  # 启动redis6379服务

一个集群至少要有三个主节点,先组合创建只有三个主节点的集群(6379、6380、6381)

组合之前,务必请确保所有redis实例启动后,nodes-xxxx.conf文件都生成正常。

注:Redis版本低的话,需要额外装上rubby环境。新版的redis自带了rubby环境

使用命令进行合并创建集群

redis-cli --cluster create --cluster-replicas 0 -a 你的redis密码
47.116.4.200:6379 47.116.4.200:6380 47.116.4.200:6381
  • ① -replicas 0 表示创建集群的方式,以0个从机的方式创建集群(此处即为创建仅有三个主机的集群)。
  • ②-a参数填写redis服务器的密码(没有设置密码可以不写-a)
  • ③最后面跟的是服务器的ip和端口号。

在这里插入图片描述

启动redis服务后,需要连接Redis。

集群之前的连接redis方式为:redis-cli -p 端口号

集群连接redis方式为:redis-cli -c -p 端口号(使用-c参数表示 采用集群策略连接。因为是无中心化,所以连接任何一个节点(如6379、6380、6381)都可以)

redis-cli -c -p 6379

查看集群信息

cluster nodes 

在这里插入图片描述

增加三个从机到集群中去,并设置相应的主机

redis-cli --cluster add-node 47.116.4.200:6389 47.116.4.200:6379 --cluster-slave --cluster-master-id 主机的id (-a Redis密码) #增加从节点6389到集群中去,并将其设置为6379主机的从机。

  • 此处的47.116.4.200:6389为目标从机及其端口号
  • 此处的47.116.4.200:6379为目标主机及其端口号
  • slave 表示此操作要添加从节点
  • cluster-master-id 主机的id: 要添加到哪一个主节点,集群中主机的id可以通过cluster nodes查看
  • -a :如果设置了redis密码,需要-a参数并填入密码

搭建完成后

  • 6379为主机,6389为从机
  • 6380为主机,6390为从机
  • 6381为主机,6391为从机

slots(插槽)

一个 Redis 集群包含 16384 个插槽(hash slot), 数据库中的每个键都属于这 16384 个插槽的其中一个。

插槽用来把值平均分配到不同主机中去,达到分担压力的效果。(比如set k1 v1操作的时候,会计算k1所在插槽值,根据各节点管辖的插槽范围,放入相应的节点中去)

集群使用公式 CRC16(key) % 16384 来计算键 key 属于哪个槽。

集群中的每个节点负责处理一部分插槽。 如下图:

在这里插入图片描述

  • 节点 6379 负责处理 0 号至 5460 号插槽。
  • 节点 6380 负责处理 5461 号至 10922 号插槽。
  • 节点 6381 负责处理 10923 号至 16383 号插槽。

集群使用

录入单个值

一开始,请求进入6379,执行set k1 值操作时,计算k1的插槽值,发现k1插槽值不在6379服务器管理范围内,于是会转移请求找到6381服务器并执行set操作。

在这里插入图片描述

录入多个值

mset key1 a key2 b key3 c   #会失败。应分组进行
  
mset key1{user} a key2{user} b key3{user} c
查询集群中的值

cluster keyslot key:计算key值的插槽数

在这里插入图片描述

②cluster countkeysinslot 插槽值:计算插槽中有几个key(键)

③cluster getkeysinslot 插槽数 个数:返回count个插槽中的key

说明里面就一个k3

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值