【Redis】浅谈Redis-集群(Cluster)

这篇具有很好参考价值的文章主要介绍了【Redis】浅谈Redis-集群(Cluster)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

下面我们来看看redis的集群实现。
redis集群,即对redis的一种水平扩容,主要解决并发写量太大有性能瓶颈,单台redis容量限制的问题。
【Redis】浅谈Redis-集群(Cluster)

n>3:一个集群至少有3个master,新master的选举需要大于半数的集群master节点同意才能选举成功,如果只有两个master节点,其中一个宕机了,达不到选举新master的条件。

1、集群实现

我们以三主三从来实现redis集群,对redis.conf进行配置,端口选择:6379,6380,6381,6389,6390,6391。

1.1 创建cluster目录,并将redis.conf复制到该文件夹

 mkdir cluster
cp /usr/local/redis/redis-6.2.1/redis.conf /opt/cluster/

1.2 复制redis.conf,并进行配置

cp /opt/cluster/redis.conf /opt/cluster/redis-6379.conf
vim redis-6379.conf


daemonize yes
bind 192.168.23.102
dir /opt/cluster/
port 6379
dbfilename dump_6379.rdb
pidfile /var/run/redis_6379.pid
logfile "./log-6379.log"


# 开启集群设置
cluster-enabled yes
# 设置节点配置文件
cluster-config-file node-6379.conf
# 设置节点失联时间,超过该时间(毫秒),集群自动进行主从切换
cluster-node-timeout 15000

其他节点的redis.conf一次进行配置,只需要将其中的端口号改成相应端口就可以了。

1.3 启动redis,查看启动状态

redis-server /opt/cluster/redis-6379.conf

其他端口的redis按照上述命令启动就OK。
【Redis】浅谈Redis-集群(Cluster)

出现如图,则证明正常启动。

1.4 合成集群

进入redis的src目录执行redis-cli --cluster create --cluster-replicas 1 ip:端口,合成集群

redis-cli --cluster create --cluster-replicas 1 192.168.23.102:6379 192.168.23.102:6380 192.168.23.102:6381 192.168.23.102:6389 192.168.23.102:6390 192.168.23.102:6391

【Redis】浅谈Redis-集群(Cluster)

回车后执行,在执行过程中会让我们确定是否同意这样的分配,输入:yes即可。等待程序执行完成,集群也就创建成功。

1.5 查看集群

进入redis中,使用cluster nodes来查看集群信息。

redis-cli -h 192.168.23.102 -p 6379 


cluster nodes

【Redis】浅谈Redis-集群(Cluster)
如图:我们可以看到各个redis节点的角色,同时在slave节点上附带了对应master的id,例如:slave6390上附带的master节点的id:159b9f1162492aef8cfb3b81c72dd7d2c87ba339,而这个id对应的master就是6380。

1.6 集群读写操作

我们使用redis-cli -h 192.168.23.102 -p 6379 进入的redis中,使用set name jiashn来写入数据。

我们发现,写入数据是redis报错了,告诉我们moved到6380。
这是因为在cluster中存在槽(slots)概念。redis集群将内部划分成16384个slots(插槽),合并成集合的时候,会将每个slots映射到一个master上。例如:上面的三个master,映射范围如下:

Redis主节点 插槽(slots)范围
master1 (6379)[0-5460] 0是开始位置,表示第一个插槽
master2 (6380)[5460-10922]
master3 (6381)[10922-16383]
slave1,slave2,slave3 从节点没有插槽,slave是用来对master做替补

而每个写入数据的key通过CRC16(key)%16384运算后得到slots的位置,然后根据slots与master的映射关系找到对应的redis节点,然后将数据写入的对应的master中。
如果需要在集群中读写数据,不出现上面的报错问题,那么在进入对应端口redis时在redis-cli后加上-c,即redis-cli -c -h 192.168.23.102 -p 6379
【Redis】浅谈Redis-集群(Cluster)

从图中我们可以看到,读写入数据成功了,也提示我们slot的值,以及对应master。

注1:在同一个slot下,不能使用多键值操作,例如:mset key1 value1 key2 value2

可以通过{}来定义组的概念,从而使key中{}内相同的键值放在同一个slot中。例如:mset key1{g1} jiashn key2{g1} queena

注2:如果一段插槽的master都宕机了,redis服务会继续吗?
这取决于cluster-requure-full-coverage参数值:
yes:默认,整个集群都无法提供服务
no:宕机部分的插槽不能使用,其他槽位正常使用

2、SpringBoot整合redis集群

2.1 引入包

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2.2 设置配置

# 集群节点(host:port),多个之间用逗号隔开
spring.redis.cluster.nodes=192.168.23.102:6379,192.168.23.102:6380,192.168.23.102:6381,192.168.23.102:6389,192.168.23.102:6390,192.168.23.102:6391
# 连接超时时间(毫秒)
spring.redis.timeout=60000

2.3 使用RedisTemplate工具

@Autowired
private RedisTemplate<String, String> redisTemplate;

// 用下面5个对象来操作对应的类型
this.redisTemplate.opsForValue(); //提供了操作string类型的所有方法
this.redisTemplate.opsForList(); // 提供了操作list类型的所有方法
this.redisTemplate.opsForSet(); //提供了操作set的所有方法
this.redisTemplate.opsForHash(); //提供了操作hash表的所有方法
this.redisTemplate.opsForZSet(); //提供了操作zset的所有方法

总结

上述就是Redis的集群实现,可能存在不详细的地方,请大家多多指出。同时也希望对大家理解redis有所帮助。文章来源地址https://www.toymoban.com/news/detail-466451.html

到了这里,关于【Redis】浅谈Redis-集群(Cluster)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Redis集群(cluster模式)搭建

    目录 1、什么是集群 2、为什么使用 3、集群连接 4、redis cluster 如何分配这六个节点? 5、集群搭建: Redis 集群(包括很多小集群)实现了对Redis的水平扩容,即启动N个redis节点,将整个数据库分布存储在这N个节点中,每个节点存储总数据的1/N,即一个小集群存储1/N的数据,每

    2024年02月15日
    浏览(48)
  • 【2023-05-01】redis集群(主从、哨兵、cluster集群)

    主从复制 :采用的是一主多从模式,一个master节点可以用有多个slave节点,一个slave节点可以有多个slave节点 优点: ​ 1、主从结果可以读写分离,主从同步是采用的非阻塞同步,slave节点在完成同步之前有查询请求,则返回同步之前的数据。 ​ 2、slave节点可以连接slave节点

    2024年02月02日
    浏览(36)
  • Docker 搭建Redis Cluster 集群

    环境: centos7 redis:7.0.5 三主三从,六个节点 一、下载redis镜像 docker pull redis:7.0.5 二、创建虚拟网卡 网卡类型为bridge桥接类型 三、准备redis配置文件 redis.conf 配置解释: port :节点端口; requirepass :设置密码,访问时需要验证 masterauth: 设置主从复制密码 protected-mode :保护模

    2024年02月09日
    浏览(43)
  • 【2023】Redis cluster集群模式搭建

    Redis Cluster是Redis提供的一种分布式方案,可以将数据分散到多个节点上进行存储和处理,提高数据的可用性和性能。Redis Cluster采用哈希槽的方式来分片数据,将整个数据集分为 16384 个哈希槽,每个节点负责一部分哈希槽的数据存储和处理,节点之间通过gossip协议进行信息交

    2024年02月08日
    浏览(53)
  • Redis 主从复制 + 哨兵模式 + Cluster 集群

    redis群集有三种模式: 分别是主从同步/复制、哨兵模式、Cluster,下面会讲解一下三种模式的工作方式,以及如何搭建cluster群集 主从复制是高可用Redis的基础,哨兵和集群都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡

    2024年02月09日
    浏览(41)
  • 使用docker搭建 redis cluster 集群

    目录 1.拉取redis镜像 2.创建network 3.创建redis配置文件 4.创建redis容器 5.创建Redis Cluster集群 6.测试 1.拉取redis镜像 2.创建network docker容器创建的应用会默认使用 bridge,但是每次重启docker此网络的ip会动态变更,因此需要我们自己手动创建一个固定的network 其它虚拟网卡相关命令

    2024年02月02日
    浏览(40)
  • Redis进阶底层原理-Cluster集群底层

    Redis底层原理篇

    2024年02月16日
    浏览(38)
  • 【Redis】高可用之三:集群(cluster)

    本文是Redis系列第6篇,前5篇欢迎移步  【Redis】不卡壳的 Redis 学习之路:从十大数据类型开始入手_AQin1012的博客-CSDN博客 关于Redis的数据类型,各个文章总有些小不同,我们这里讨论的是Redis 7.0,为确保准确,我们直接看官网。 https://blog.csdn.net/aqin1012/article/details/130365083 【

    2024年02月16日
    浏览(42)
  • redis的主从复制,哨兵和cluster集群

    目录 一、redis的高可用 1)redis高可用的概念 2)Redis的高可用技术 二、redis主从复制 1)主从复制的作用 2)主从复制流程 三、redis一主二从的部署 实验组件 实验步骤 环境准备 修改内核参数 安装 Redis 创建redis工作目录 环境变量 定义systemd服务管理脚本 修改 Redis 配置文件(

    2024年02月13日
    浏览(34)
  • Redis Cluster 集群故障排查与解决方案

    Redis是一个开源的内存数据结构存储系统,可以用作数据库、缓存和消息中间件。它支持多种数据结构(如字符串、哈希表、列表、集合等)和功能(如事务、分布式锁、Lua脚本等),能够满足不同场景的需求。 Redis Cluster是Redis提供的分布式解决方案,主要由以下几个组成部

    2024年02月14日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包