Redis高级篇 - 分布式缓存-2

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,经济版 1GB 1个月
简介: Redis高级篇 - 分布式缓存-2

4.3.2.创建新的redis实例

创建一个文件夹:

mkdir 7004
• 1

拷贝配置文件:

cp redis.conf /7004

修改配置文件:

sed /s/6379/7004/g 7004/redis.conf
• 1

启动

redis-server 7004/redis.conf

4.3.3.添加新节点到redis

添加节点的语法如下:

执行命令:

redis-cli --cluster add-node  192.168.150.101:7004 192.168.150.101:7001

过命令查看集群状态:

redis-cli -p 7001 cluster nodes
• 1

如图,7004加入了集群,并且默认是一个master节点:

但是,可以看到7004节点的插槽数量为0,因此没有任何数据可以存储到7004上


4.3.4.转移插槽

我们要将num存储到7004节点,因此需要先看看num的插槽是多少:

如上图所示,num的插槽为2765.


我们可以将0~3000的插槽从7001转移到7004,命令格式如下:

具体命令如下:

建立连接:



得到下面的反馈:

询问要移动多少个插槽,我们计划是3000个:


新的问题来了:

那个node来接收这些插槽??

显然是7004,那么7004节点的id是多少呢?

复制这个id,然后拷贝到刚才的控制台后:

这里询问,你的插槽是从哪里移动过来的?


  • all:代表全部,也就是三个节点各转移一部分
  • 具体的id:目标节点的id
  • done:没有了


这里我们要从7001获取,因此填写7001的id:

填完后,点击done,这样插槽转移就准备好了:

确认要转移吗?输入yes:


然后,通过命令查看结果:

可以看到:

目的达成。


4.4.故障转移

集群初识状态是这样的:

其中7001、7002、7003都是master,我们计划让7002宕机。

.4.1.自动故障转移

当集群中有一个master宕机会发生什么呢?

直接停止一个redis实例,例如7002:

redis-cli -p 7002 shutdown



1)首先是该实例与其它实例失去连接

2)然后是疑似宕机:

3)最后是确定下线,自动提升一个slave为新的master:


ad1903eca89f41cc2a8eeb0b31b2d430.png

4)当7002再次启动,就会变为一个slave节点了:

4.4.2.手动故障转移

利用cluster failover命令可以手动让集群中的某个master宕机,切换到执行cluster failover命令的这个slave节点,实现无感知的数据迁移。其流程如下:

这种failover命令可以指定三种模式:


缺省:默认的流程,如图1~6歩

force:省略了对offset的一致性校验

takeover:直接执行第5歩,忽略数据一致性、忽略master状态和其它master的意见

案例需求:在7002这个slave节点执行手动故障转移,重新夺回master地位


步骤如下:


1)利用redis-cli连接7002这个节点


2)执行cluster failover命令


如图:

效果:

4.5.RedisTemplate访问分片集群


RedisTemplate底层同样基于lettuce实现了分片集群的支持,而使用的步骤与哨兵模式基本一致:

1)引入redis的starter依赖

2)配置分片集群地址

3)配置读写分离

与哨兵模式相比,其中只有分片集群的配置方式略有差异,如下:

spring:
  redis:
    cluster:
      nodes:
        - 192.168.150.101:7001
        - 192.168.150.101:7002
        - 192.168.150.101:7003
        - 192.168.150.101:8001
        - 192.168.150.101:8002
        - 192.168.150.101:8003



4.6 Redis分片集群优缺点及使用场景


优点:


提高系统性能和吞吐量:通过将数据分布到多个节点并行处理,可以显著提高系统的读写性能和吞吐量。

提高可用性和容错性:当某个节点宕机或出现故障时,其他节点仍可以正常工作,避免了单点故障对整个系统造成的影响,并保证了数据的安全性和可靠性。

扩展性好:通过增加节点的数量,可以方便地扩展系统的处理能力和存储能力,有良好的水平扩展性。

缺点:


需要额外的配置和管理:需要对分片规则、节点运行状态等进行配置和管理,相比于单节点,分片集群的部署和维护要复杂得多。

数据迁移成本较高:当需要调整节点数量或进行系统升级时,需要大量的数据迁移和重新平衡,其中包括数据备份、恢复、重定向和再平衡操作等,因此数据迁移的成本很高。

事务处理限制:由于Redis的分布式事务功能受到限制,导致在进行事务处理时,可能会因为跨多节点而存在很多限制,而且在某些场景下,可能需要使用到分布式锁等相关技术,进行事务处理的控制。

使用场景:


数据量较大或读写频繁:当单个Redis节点无法满足系统的性能要求时,可以考虑将数据分片到多个节点上,提高系统的处理能力和吞吐量。

业务需求分区:当业务数据可以按照某种规则进行划分并处理,比如按照用户ID进行划分,可以将不同用户的数据存储在不同的节点上,减少数据之间的交叉影响,同时提高系统的可维护性和可扩展性。

高可用性和容错性:当业务对于服务的可用性和数据安全性有严格要求时,可以采用Redis分片集群,保证系统的可用性和数据的安全性。

ter:

nodes:

- 192.168.150.101:7001

- 192.168.150.101:7002

- 192.168.150.101:7003

- 192.168.150.101:8001

- 192.168.150.101:8002- 192.168.150.101:8002

- 192.168.150.101:8003

## 4.6 Redis分片集群优缺点及使用场景
优点:
1. 提高系统性能和吞吐量:通过将数据分布到多个节点并行处理,可以显著提高系统的读写性能和吞吐量。
2. 提高可用性和容错性:当某个节点宕机或出现故障时,其他节点仍可以正常工作,避免了单点故障对整个系统造成的影响,并保证了数据的安全性和可靠性。
3. 扩展性好:通过增加节点的数量,可以方便地扩展系统的处理能力和存储能力,有良好的水平扩展性。
缺点:
1. 需要额外的配置和管理:需要对分片规则、节点运行状态等进行配置和管理,相比于单节点,分片集群的部署和维护要复杂得多。
2. 数据迁移成本较高:当需要调整节点数量或进行系统升级时,需要大量的数据迁移和重新平衡,其中包括数据备份、恢复、重定向和再平衡操作等,因此数据迁移的成本很高。
3. 事务处理限制:由于Redis的分布式事务功能受到限制,导致在进行事务处理时,可能会因为跨多节点而存在很多限制,而且在某些场景下,可能需要使用到分布式锁等相关技术,进行事务处理的控制。
使用场景:
1. 数据量较大或读写频繁:当单个Redis节点无法满足系统的性能要求时,可以考虑将数据分片到多个节点上,提高系统的处理能力和吞吐量。
2. 业务需求分区:当业务数据可以按照某种规则进行划分并处理,比如按照用户ID进行划分,可以将不同用户的数据存储在不同的节点上,减少数据之间的交叉影响,同时提高系统的可维护性和可扩展性。
3. 高可用性和容错性:当业务对于服务的可用性和数据安全性有严格要求时,可以采用Redis分片集群,保证系统的可用性和数据的安全性。



相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
18天前
|
缓存 NoSQL 关系型数据库
(八)漫谈分布式之缓存篇:唠唠老生常谈的MySQL与Redis数据一致性问题!
本文来聊一个跟实际工作挂钩的老生常谈的问题:分布式系统中的缓存一致性。
68 10
|
20天前
|
缓存 NoSQL Serverless
函数计算产品使用问题之如何使用Redis作为缓存插件
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
4天前
|
NoSQL Java Redis
Redis字符串数据类型之INCR命令,通常用于统计网站访问量,文章访问量,实现分布式锁
这篇文章详细解释了Redis的INCR命令,它用于将键的值增加1,通常用于统计网站访问量、文章访问量,以及实现分布式锁,同时提供了Java代码示例和分布式锁的实现思路。
11 0
|
4天前
|
存储 缓存 NoSQL
基于SpringBoot+Redis解决缓存与数据库一致性、缓存穿透、缓存雪崩、缓存击穿问题
这篇文章讨论了在使用SpringBoot和Redis时如何解决缓存与数据库一致性问题、缓存穿透、缓存雪崩和缓存击穿问题,并提供了相应的解决策略和示例代码。
13 0
|
4天前
|
缓存 NoSQL Ubuntu
如何在 Ubuntu 14.04 上配置 Redis 缓存以加速 WordPress
如何在 Ubuntu 14.04 上配置 Redis 缓存以加速 WordPress
10 0
|
存储 缓存 NoSQL
用REDIS实现分布式缓存
Redis是基于内存、可持久化的日志型、Key-Value数据库 高性能存储系统,并提供多种语言的API. 第二:出现背景 数据结构(Data Structure)需求越来越多, 但memcache中没有, 影响开发效率 性能需求, 随着读操作的量的上升需要解决,经历的过程有: 数据库读写分离(M
3075 0
|
3天前
|
NoSQL 数据可视化 Redis
Mac安装Redis
Mac安装Redis
13 3
|
4天前
|
NoSQL Ubuntu 安全
在Ubuntu 18.04上安装和保护Redis的方法
在Ubuntu 18.04上安装和保护Redis的方法
13 0
|
4天前
|
存储 NoSQL Java
使用redis进行手机验证码的验证、每天只能发送三次验证码 (redis安装在虚拟机linux系统中)
该博客文章展示了如何在Linux虚拟机上使用Redis和Jedis客户端实现手机验证码的验证功能,包括验证码的生成、存储、验证以及限制每天发送次数的逻辑,并提供了测试结果截图。
使用redis进行手机验证码的验证、每天只能发送三次验证码 (redis安装在虚拟机linux系统中)