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

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 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 关系型数据库
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
本文详解缓存雪崩、缓存穿透、缓存并发及缓存预热等问题,提供高可用解决方案,帮助你在大厂面试和实际工作中应对这些常见并发场景。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
|
20天前
|
存储 缓存 NoSQL
【赵渝强老师】基于Redis的旁路缓存架构
本文介绍了引入缓存后的系统架构,通过缓存可以提升访问性能、降低网络拥堵、减轻服务负载和增强可扩展性。文中提供了相关图片和视频讲解,并讨论了数据库读写分离、分库分表等方法来减轻数据库压力。同时,文章也指出了缓存可能带来的复杂度增加、成本提高和数据一致性问题。
【赵渝强老师】基于Redis的旁路缓存架构
|
19天前
|
NoSQL Redis
Redis分布式锁如何实现 ?
Redis分布式锁通过SETNX指令实现,确保仅在键不存在时设置值。此机制用于控制多个线程对共享资源的访问,避免并发冲突。然而,实际应用中需解决死锁、锁超时、归一化、可重入及阻塞等问题,以确保系统的稳定性和可靠性。解决方案包括设置锁超时、引入Watch Dog机制、使用ThreadLocal绑定加解锁操作、实现计数器支持可重入锁以及采用自旋锁思想处理阻塞请求。
53 16
|
13天前
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
33 5
|
28天前
|
缓存 NoSQL Redis
Redis 缓存使用的实践
《Redis缓存最佳实践指南》涵盖缓存更新策略、缓存击穿防护、大key处理和性能优化。包括Cache Aside Pattern、Write Through、分布式锁、大key拆分和批量操作等技术,帮助你在项目中高效使用Redis缓存。
154 22
|
27天前
|
缓存 NoSQL 中间件
redis高并发缓存中间件总结!
本文档详细介绍了高并发缓存中间件Redis的原理、高级操作及其在电商架构中的应用。通过阿里云的角度,分析了Redis与架构的关系,并展示了无Redis和使用Redis缓存的架构图。文档还涵盖了Redis的基本特性、应用场景、安装部署步骤、配置文件详解、启动和关闭方法、systemctl管理脚本的生成以及日志警告处理等内容。适合初学者和有一定经验的技术人员参考学习。
135 7
|
2月前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(一)
数据的存储--Redis缓存存储(一)
|
2月前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(二)
数据的存储--Redis缓存存储(二)
数据的存储--Redis缓存存储(二)
|
2月前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
78 6
|
2月前
|
缓存 NoSQL 关系型数据库
redis和缓存及相关问题和解决办法 什么是缓存预热、缓存穿透、缓存雪崩、缓存击穿
本文深入探讨了Redis缓存的相关知识,包括缓存的概念、使用场景、可能出现的问题(缓存预热、缓存穿透、缓存雪崩、缓存击穿)及其解决方案。
189 0
redis和缓存及相关问题和解决办法 什么是缓存预热、缓存穿透、缓存雪崩、缓存击穿