Redis的这些拓展方案,用过一条的就是p6级

分区(Partitioning)是一种最为简单的拓展方式。

在我们面临单机的存储空间瓶颈时,第一点就能想到像传统的关系型数据库一样,进行数据分区。

或者假设手中有N台机器可以作为Redis服务器,所有机器内存总和有256G, 而客户端正好也需要一个大内存的存储空间。

我们除了可以把内存条都拆下来焊到一个机器上,也可以选择分区使用,这样又拓展了计算能力。

单指分区来讲,即将全部数据分散在多个Redis实例中,每个实例不需要关联,可以是完全独立的。

使用方式

客户端处理

和传统的数据库分库分表一样,可以从key入手,先进行计算,找到对应数据存储的实例在进行操作。范围角度,比如orderId:1orderId:1000放入实例1,orderId:1001orderId:2000放入实例2。

哈希计算,就像我们的hashmap一样,用hash函数加上位运算或者取模,高级玩法还有一致性Hash等操作,找到对应的实例进行操作

使用代理中间件

我们可以开发独立的代理中间件,屏蔽掉处理数据分片的逻辑,独立运行。

当然也有他人已经造好的轮子,Redis也有优秀的代理中间件,譬如Twemproxy,或者codis,可以结合场景选择是否使用。

缺点

无缘多key操作,key都不一定在一个实例上,那么多key操作或者多key事务自然是不支持。

维护成本,由于每个实例在物理和逻辑上,都属于单独的一个节点,缺乏统一管理。

灵活性有限,范围分片还好,比如hash+MOD这种方式,如果想动态调整Redis实例的数量,就要考虑大量数据迁移,这就非常麻烦了。

同为开发者,深知我们虽然总能“曲线救国”的完成一些当前环境不支持的功能,但是总归要麻烦一些。

主从

概述数据迁移

常说的主从(Master-Slave),也就是复制(Replication)方式,怎么称呼都可以。

同上面的分区一样,也是Redis高可用架构的基础,新手可能会误以为这类基础模式即是“高可用”,这并不是十分正确的。

分区暂时能解决单点无法容纳的数据量问题,但是一个Key还是只在一个实例上,在大流量时代显得不那么可靠。

主从就是另一个纬度的拓展,节点将数据同步到从节点,就像将实例“分身”了一样,可靠性又提高了不少。

图画的有些夸张了,主要还是想体现结构灵活,是一主一从,还是一主多从,还是一主多从多从… 看你心情

有了“实例分身”,自然就可以做读写分离,将读流量均摊在各个从节点。

使用方式

高手云集的时代,聊天软件难免要备上这么一张表情包。

这表情包和使用方式有什么关系呢?首先看看使用方式:

作为主节点的Redis实例,并不要求配置任何参数,只需要正常启动

作为从节点的实例,使用配置文件或命令方式REPLICAOF 主节点Host 主节点port即可完成主从配置

是不是和表情包一样,“dalao”没动,我去“抱大腿”。

这样一个主从最小配置就完成了,主从实例即可对外提供服务。

命令里的“主节点”是相对的,slave也可以抱slave大腿,也就是上文提到的结构灵活。

缺点

slave节点都是只读的,如果写流量大的场景,就有些力不从心了。

那我把slave节点只读关掉不就行了?当然不行,数据复制是由主到从,从节点独有数据同步不到主节点,数据就不一致了。

故障转移不友好,主节点挂掉后,写处理就无处安放,需要手工的设定新的主节点,如使用REPLICAOF no one(谁大腿我都不抱了) 晋升为主节点,再梳理其他slave节点的新主配置,相对来说比较麻烦。

哨兵

概述

主从的手工故障转移,肯定让人很难接受,自然就出现了高可用方案-哨兵(Sentinel)。

我们可以在主从架构不变的场景,直接加入Redis Sentinel,对节点进行监控,来完成自动的故障发现与转移。

并且还能够充当配置提供者,提供主节点的信息,就算发生了故障转移,也能提供正确的地址。

哨兵本身也是Redis实例的一种,但不作为数据存储方使用,启动命令也是不一样的。

虽然图有些复杂,看起来像要召唤光能使者。

其实实际使用起来是很便捷的。

使用方式

Sentinel的最小配置,一行即可:

1sentinel monitor <主节点别名> <主节点host> <主节点端口> <票数>

只需要配置master即可,然后用redis-sentinel <配置文件> 命令即可启用。

Redis官网提到的“最小配置”是如下所示,除了上面提到的一行,还有其它的一些配置:

1sentinel monitor mymaster 127.0.0.1 6379 2

2sentinel down-after-milliseconds mymaster 60000

3sentinel failover-timeout mymaster 180000

4sentinel parallel-syncs mymaster 1

5

6sentinel monitor resque 192.168.1.3 6380 4

7sentinel down-after-milliseconds resque 10000

8sentinel failover-timeout resque 180000

9sentinel parallel-syncs resque 5

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
img

38392509)]
[外链图片转存中…(img-TX0nJey6-1710838392510)]
[外链图片转存中…(img-HED0oHvW-1710838392510)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-R9gl6HPj-1710838392510)]

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值