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分片集群,保证系统的可用性和数据的安全性。



目录
相关文章
|
1月前
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
190 2
|
1月前
|
存储 缓存 NoSQL
【📕分布式锁通关指南 12】源码剖析redisson如何利用Redis数据结构实现Semaphore和CountDownLatch
本文解析 Redisson 如何通过 Redis 实现分布式信号量(RSemaphore)与倒数闩(RCountDownLatch),利用 Lua 脚本与原子操作保障分布式环境下的同步控制,帮助开发者更好地理解其原理与应用。
100 0
|
2月前
|
存储 缓存 NoSQL
Redis核心数据结构与分布式锁实现详解
Redis 是高性能键值数据库,支持多种数据结构,如字符串、列表、集合、哈希、有序集合等,广泛用于缓存、消息队列和实时数据处理。本文详解其核心数据结构及分布式锁实现,帮助开发者提升系统性能与并发控制能力。
|
12天前
|
存储 缓存 NoSQL
Redis专题-实战篇二-商户查询缓存
本文介绍了缓存的基本概念、应用场景及实现方式,涵盖Redis缓存设计、缓存更新策略、缓存穿透问题及其解决方案。重点讲解了缓存空对象与布隆过滤器的使用,并通过代码示例演示了商铺查询的缓存优化实践。
77 1
Redis专题-实战篇二-商户查询缓存
|
18天前
|
NoSQL Java 调度
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
分布式锁是分布式系统中用于同步多节点访问共享资源的机制,防止并发操作带来的冲突。本文介绍了基于Spring Boot和Redis实现分布式锁的技术方案,涵盖锁的获取与释放、Redis配置、服务调度及多实例运行等内容,通过Docker Compose搭建环境,验证了锁的有效性与互斥特性。
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
|
12天前
|
缓存 NoSQL 关系型数据库
Redis缓存和分布式锁
Redis 是一种高性能的键值存储系统,广泛用于缓存、消息队列和内存数据库。其典型应用包括缓解关系型数据库压力,通过缓存热点数据提高查询效率,支持高并发访问。此外,Redis 还可用于实现分布式锁,解决分布式系统中的资源竞争问题。文章还探讨了缓存的更新策略、缓存穿透与雪崩的解决方案,以及 Redlock 算法等关键技术。
|
2月前
|
NoSQL Redis
Lua脚本协助Redis分布式锁实现命令的原子性
利用Lua脚本确保Redis操作的原子性是分布式锁安全性的关键所在,可以大幅减少由于网络分区、客户端故障等导致的锁无法正确释放的情况,从而在分布式系统中保证数据操作的安全性和一致性。在将这些概念应用于生产环境前,建议深入理解Redis事务与Lua脚本的工作原理以及分布式锁的可能问题和解决方案。
130 8
|
3月前
|
缓存 NoSQL 算法
高并发秒杀系统实战(Redis+Lua分布式锁防超卖与库存扣减优化)
秒杀系统面临瞬时高并发、资源竞争和数据一致性挑战。传统方案如数据库锁或应用层锁存在性能瓶颈或分布式问题,而基于Redis的分布式锁与Lua脚本原子操作成为高效解决方案。通过Redis的`SETNX`实现分布式锁,结合Lua脚本完成库存扣减,确保操作原子性并大幅提升性能(QPS从120提升至8,200)。此外,分段库存策略、多级限流及服务降级机制进一步优化系统稳定性。最佳实践包括分层防控、黄金扣减法则与容灾设计,强调根据业务特性灵活组合技术手段以应对高并发场景。
1031 7
|
6月前
|
数据采集 存储 数据可视化
分布式爬虫框架Scrapy-Redis实战指南
本文介绍如何使用Scrapy-Redis构建分布式爬虫系统,采集携程平台上热门城市的酒店价格与评价信息。通过代理IP、Cookie和User-Agent设置规避反爬策略,实现高效数据抓取。结合价格动态趋势分析,助力酒店业优化市场策略、提升服务质量。技术架构涵盖Scrapy-Redis核心调度、代理中间件及数据解析存储,提供完整的技术路线图与代码示例。
608 0
分布式爬虫框架Scrapy-Redis实战指南
|
4月前
|
数据采集 存储 NoSQL
基于Scrapy-Redis的分布式景点数据爬取与热力图生成
基于Scrapy-Redis的分布式景点数据爬取与热力图生成
313 67

热门文章

最新文章