Redis——扩容

redis中hash扩容过程 数据结构 Redis一共支持5种数据结构,hash是其中的一种,在hash扩容的时候采用的是渐进式rehash的方式。要想深入理解渐进式rehash,首先要了解以下Redis中hash的数据结构。 哈希表节点 typedef struct dictEntry { void *key; // 键 union { void *val; uint64_t u64; int64_t s64; double d; } v; // 阅读详情

解决哈希冲突

当要将一个新的键值对添加到字典里面时,程序需要先根据键值对的键计算出哈希值和索引值,然后再根据索引值,将包含新键值对的哈希表节点放到哈希表数组的指定索引上。

当有两个或以上数量的键被分配到了哈希表数组的同一个索引上时,称为哈希冲突,Redis的哈希表使用单向链表解决冲突,使用哈希表节点的next指针将冲突的节点连接起来,因为dictEntry节点组成的链表没有指向链表表尾的指针,为了速度考虑,总是将新节点添加的链表的表头位置(复杂度为O(1))。


rehash

为了让哈希表的负载因子(load factor)维持在一个合理的范围内,会使用rehash(重新散列)操作对哈希表进行相应的扩展或收缩。

哈希表被扩展的条件:
1)Redis服务器目前没有在执行BGSAVE命令或BGREWRITEAOF命令,并且哈希表的负载因子大于等于1。

2)Redis服务器目前在执行BGSAVE命令或BGREWRITEAOF命令,并且哈希表的负载因子大于等于5。

负载因子=哈希表已保存节点数量 / 哈希表大小 load_factor = ht[0].used / ht[0].size

当哈希表的负载因子小于0.1时,对哈希表执行收缩操作。


rehash的操作步骤

1)为字典的ht[1]哈希表分配空间。

如果执行的是扩展操作,那么ht[1] 的大小为第一个大于等于ht[0] .used*2的2的n次幂

如果执行的是收缩操作,那么ht[1] 的大小为第一个大于等于ht[0].used 的2的n次幂

因此这里我们为ht[1] 分配 空间为8

2)将ht[0]中的数据转移到ht[1]中,在转移的过程中,重新计算键的哈希值和索引值,然后将键值对放置到ht[1]的指定位置。

数据转移后的结果:

3)当ht[0]的所有键值对都迁移到了ht[1]之后(ht[0]变为空表),将ht[0]释放,然后将ht[1]设置成ht[0],最后为ht[1]分配一个空白哈希表:


渐近式rehash

上面我们说到,在进行拓展或者压缩的时候,可以直接将所有的键值对rehash 到ht[1]中,这是因为数据量比较小。在实际开发过程中,这个rehash 操作并不是一次性、集中式完成的,而是分多次、渐进式地完成的。

渐进式rehash 的详细步骤:

1、为ht[1] 分配空间,让字典同时持有ht[0]和ht[1]两个哈希表

2、在几点钟维持一个索引计数器变量rehashidx,并将它的值设置为0,表示rehash 开始

3、在rehash 进行期间,每次对字典执行CRUD操作时,程序除了执行指定的操作以外,还会将ht[0]中的数据rehash 到ht[1]表中,并且将rehashidx加一

4、当ht[0]中所有数据转移到ht[1]中时,将rehashidx 设置成-1,表示rehash 结束

采用渐进式rehash 的好处在于它采取分而治之的方式,避免了集中式rehash 带来的庞大计算量。

Redis集群节点扩容 文章目录案列概述软件包redis节点扩容1、节点基础环境(两台操作一致)2、安装redis(2台同时安装)3、创建集群4、使用redis-cli启动自动迁移5、迁移后检测各个节点槽的均衡性6、为扩容的主节点添加从节点7、平衡各节点槽数量 案列概述 ​ 某电商大型项目,由于业务大规模升级。项目中的前置缓存节点,已经不能满足当前的业务需求,现在对redis集群扩容一套redis主备节点,对于... 阅读详情

相关推荐

Redis扩容策略及实现详解

水平扩容:水平扩容是指通过增加Redis实例的数量来增加整个系统的存储容量。水平扩容的好处是可以充分利用多台服务器的资源,提高整个系统的并发处理能力和存储容量。但是,水平扩容需要对应用程序进行修改,以支持Redis集群的访问方式。水平扩容:水平扩容是指通过增加Redis实例的数量来增加整个系统的存储容量。垂直扩容的好处是操作简单,不需要对现有的应用程序进行修改,但是它的扩容能力受限于单台服务器的硬件极限。垂直扩容的好处是操作简单,不需要对现有的应用程序进行修改,但是它的扩容能力受限于单台服务器的硬件极限。

DpJulia的博客 905

Redis大集群扩容性能优化实践

一、背景 在现网环境,一些使用Redis集群的业务随着业务量的上涨,往往需要进行节点扩容操作。 之前有了解到运维同学对一些节点数比较大的Redis集群进行扩容操作后,业务侧反映集群性能下降,具体表现在访问时延增长明显。 某些业务对Redis集群访问时延比较敏感,例如现网环境对模型实时读取,或者一些业务依赖读取Redis集群的同步流程,会影响业务的实时流程时延。业务侧可能无法接受。 为了找到这个问题的根因,我们对某一次的Redis集群迁移操作后的集群性能下降问题进行排查。 1.1 问题描述 这一次

Java知识分享官的博客 334

RAW、RGB、YUV图像格式的采样与存储原理详解

本文详细解析了RAW、RGB和YUV三种核心图像格式的采样与存储原理。RAW是传感器原始数据,信息完整但需后期处理;RGB直接对应显示,直观但数据量大;YUV通过亮色分离与色度下采样,在保证观感的前提下大幅提升传输与存储效率,是视频编码与流媒体的主流格式。理解其差异是图像处理与视频开发的基础。

e4f5g6h7的博客 516

Redis集群--扩容的过程(原理)

本文介绍Redis的Cluster集群扩容的过程(原理)。

IT利刃出鞘的博客 4833

解决若依Vue3前后端分离---路由切换时显示白屏

解决基于Vue3若依前后端分离项目中出现的路由正常切换但是就是不显示数据的问题,也就是不发起网络请求的问题。

简单点的博客 1605

【MFRC522】STM32与MFRC522的SPI通信优化及常见问题解析

本文深入解析了STM32与MFRC522进行SPI通信的优化方法与常见问题。从基础的硬件连接到SPI时序优化,再到关键的寄存器配置(如RFCfgReg设为0x4F以提升读卡稳定性),文章提供了详细的调试技巧和实战排坑指南,帮助开发者实现稳定高效的IC读卡应用。

yhn45678901的博客 841

分布式项目08 redis的扩容,预备redis宕机的哨兵处理 和 最后集大成redis集群

第三步:搭建redis分片(分片由三台redis服务器组成,端口号分别是6379,6380,6381)为了方便管理redis分片,在redis目录下创建一个新的文件夹shards,这个文件名shads和在springboot项目中使用redis分片对象的类名差不多。第二步:使用查看当前redis进程的命令ps -ef|grep redis,并且关闭redis服务。01 由于redis的容量也是有限的,所以,就会有扩容的操作。也就好像内存中扩容一样。第五步:修改复制后文件的端口号,不同的端口号表示这是一个。

qq_38757863的博客 1109

关于使用perfetto(systrace)对卡顿进行分析-实战分析

本文主要讲述了我在使用perfetto分析小米中桌面滑动卡顿的方法以及步骤。 这是我用的trace文件: 链接:https://pan.baidu.com/s/11EhCvu0pfR7Qfu6bDf_GLw?pwd=ic43 提取码:ic43Perfetto 是用于性能检测和跟踪分析的生产级开源堆栈。它提供用于记录系统级和应用级跟踪、本机 + java 堆分析、使用 SQL 分析跟踪的库以及用于可视化和浏览多 GB 跟踪的基于 Web 的 UI 的服务和库。在地址栏输入https://ui.perfe

qq_40494059的博客 1万+

Redis Cluster 集群扩容 & 缩容步骤

redis 扩容、缩容、节点平衡

扛麻袋的少年的博客 5517

hfss仿真软件入门教程

hfss仿真软件入门教程 1.模型建立 1.1在project种选择insert hfss design 1.2.在hfss-》solution type 中选择modal 1.3.在moderler-》中选择units 设置单温为mm 1.4进行画图操作,这里为提高效率直接导入一个已经画好的cad图。使用modeler-》import 2.设置端口 2.1在更改模型中的材料 选择需要更改材料...

xunshui2007的博客 3万+

Kali下RTL8812AU网卡5G抓包精准适配指南

WiFi监听模式是无线安全测试的基础能力,其核心在于网卡驱动对802.11a/n/ac协议栈的完整支持。RTL8812AU系列USB无线网卡因成本低、兼容性广被广泛用于渗透测试,但其芯片版本碎片化(如VA/VC/ACM)与Linux内核演进(6.1~6.5)存在严重适配断层,导致5GHz频段Beacon帧捕获失败、信道切换异常、注入功能残缺等典型问题。技术价值在于突破‘即插即用’幻觉,建立从USB设备ID识别、固件版本校验到射频寄存器级补丁的全链路可控流程。典型应用场景包括CTF无线赛题实战、红蓝对抗中的W

weixin_33783283的博客 763

Redis5.0+ Redis集群水平扩容|节点删除

三个master节点和三个slave节点,8004端口的实例节点存储0-5460这些hash槽,8006端口的实 例节点存储5461-10922这些hash槽,8005端口的实例节点存储10923-16383这些hash槽,这三个master节点存储的所有hash槽组成 redis集群的存储槽位,slave点是每个主节点的备份从节点,不显示存储槽位。新增的节点也没有子节点。

craftsman2020的博客 3939

【tessy】软件环境配置:Keil C51 Keil uVision UVSC (Default)

本文详细说明了tessy软件如何配置【Keil C51 Keil uVision UVSC (Default)】环境,具体操作步骤和注意事项

qq_37282365的博客 601

Redis集群扩容策略与最佳实践

在当今大数据时代,Redis作为一款高性能的键值存储系统,被广泛应用于缓存、会话管理、消息队列等领域。然而,随着业务量的不断增长,单机Redis的性能逐渐无法满足需求。为了解决这一问题,Redis集群应运而生。本文将围绕Redis集群扩容这一知识点进行探讨。在实际应用中,我们可能会遇到以下场景:一个大型电商平台,其用户数据存储在Redis中,随着用户数量的激增,单机Redis的存储能力和访问速度逐渐无法满足需求。此时,就需要对Redis集群进行扩容,以提升整体性能。

JavaCodePro的博客 1094

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

redis 正常停掉_Redis集群节点扩容大法

[架构描述]redis组件版本:redis:5.0.8节点架构:3主3从、6主机扩容后架构:6主6从、12主机[问题描述]Redis(RemoteDictionary Server ),即远程字典服务,是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。redis是一个key-value存储系统,支持存储的valu...

weixin_39663258的博客 547

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

redis 扩容相关

redis 学习工作 一:redis扩容机器内存步骤 首先redis内存设置不能超过物理机最大内存的60% 内存配置文件参数为maxmemery改为9493846630 1 确认主从状态正常,从上做bgsave备份dump文件 2 停止从服务,扩容从机内存 3 从机内存扩容完之后修改配置文件内存大小,启动从服务。查看主从复制(查看日志和slave状态为up) 4 主从复制完成以后(查看日志和sla...

lvcongzh的博客 1782

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Redis中String类型数据扩容原理分析

咱们很显然可以看出,Redis 7.0版本对SDS的实现进行了优化,使其更加紧凑和高效,同时也保持了SDS的动态扩展和二进制安全的特性。在 Java 中,我们有动态数组ArrayList,当插入新元素空间不足时,会进行扩容,好奇 Redis 中的 String 类型,C 语言又是怎样的实现策略,带着疑问,咱们来了解一下。:在新的内存空间分配完成后,Redis会更新SDS的头部信息,包括长度、空闲空间等,并复制原有数据到新的内存位置。然后,它会根据新的总长度来确定新的SDS类型,并分配新的内存空间。

威哥爱编程,华为 HDE,鸿蒙极客、优快云博客专家、《鸿蒙 HarmonyOS 5/6 开发之路》系列图书第一作者 1450

redis集群扩容和缩容_腾讯会议用户暴涨,Redis集群如何实现无缝扩容

远程办公期间,在线会议用户需求激增,腾讯会议8天完成100万核云服务器扩展,Redis集群仅在半小时以内就高效完成了数十倍规模的扩容,单集群的扩容流程后台处理时间不超过30分钟。在这背后,腾讯云Redis是如何做到的呢?本文是伍旭飞老师在「云加社区沙龙online」的分享整理,详细阐述了腾讯云Redis无损扩容的实践和挑战。一、疫情带来的挑战今年疫情带来的挑战很明显,远程办公和在线教育用户暴涨,从...

weixin_39965161的博客 396

redis 集群扩容

#目录 1、集群扩容 2、添加集群主节点 3、添加集群从节点 4、扩容集群问题 #详细过程 ###1、集群扩容 添加一个新节点的过程基本上就是,添加一个空节点,然后,如果是作为主节点则移动一些哈希槽进去, 如果是从节点则设置其作为某个节点的副本即可。 添加空节点方式参考《Redis环境搭建说明》里提到的方式即可。 添加完空节点,并启动,然后我们先来添加这个空节点作为主节点加入集群。 参考: ht...

duxin_csdn的博客 1344

redis 扩容步骤

阶段动作关键命令准备新 9 实例起好,清旧数据,配同密码加主2 新主空节点入集群redis-cli --cluster add-node 新主 旧主分槽原 3 主各匀部分槽给 M4/M5,5 主均摊 16384加从10 从分批挂到对应主同上校验看 5 主 10 从、槽全整个流程在线完成,不丢数据、不断业务先主 → 再槽 → 最后从。如果从节点想倾斜(某主热点多给它 3 从),把 Step 3 的换一下就行,不影响前面。

mnhpo_Q的博客 381

redis 集群 分片 扩容_Redis集群扩容

在使用Redis搭建集群环境时,通常会根据业务的需求,要对集群进行扩容,以满足业务的需要。并且这也是分布式存储比较常见的需求,在Redis中对集群进行扩容主要分为3步:1.准备新节点2.加入集群3.迁移槽和数据下面我们详细介绍一下这3个步骤:准备新节点我们还是向准备其它节点一样,先修改节点配置。启动该节点:但此时新增的节点还没有和其它节点进行通信,所以该节点现在还没有添加到集群环境中。加入集群将新...

weixin_39594080的博客 473

redis集群扩容

导读: a) 此文不介绍集群的部署 b) 扩容有两种方式,一种是纵向扩容:修改maxmemory,一种是横向扩容:增加节点,这里只介绍横向扩容 c) 此文利用redis-trib.rb进行集群扩容,不涉及扩容的原理 d) 建议仔细阅读官方文档:http://redis.io/topics/cluster-tutorial 步骤: 1.假设已经存在集群,该集群包含三个主节点(80

daiyudong2020的博客 2637

redis字典结构和渐进扩容

redis里的key是保存在一个类似hashmap的结构里,扩容的时候取模是这样的,比如值=3,结构大小=8.那么这个3的位置: 3 mod 8 = 3 &(8-1) = 3&7 =3; 3 = 011 扩容成16后: 3 mod 16 = 3 & 15 = 11; 11 = 1011 & 等于是一个位与操作。 比作hashMap的话,就是3这个entry上...

weixin_39312465的博客 797

Redis的哈希表是如何扩容的?

当元素数量比较少的时候就需要缩容以节约不必要的内存。为ht[1]分配空间,ht[0].used当前值为4,8恰好是第一个大于等于4的2的N次幂,那么当前就会将ht[1]哈希表大小设置为8。ht[2]:两个哈希表,字典使用的哈希表是ht[0],ht[1]则是当对ht[0]哈希表进行rehash时使用。迁移过程中,新增的数据只会存在ht[1]中,而不会存放到ht[0],ht[0]只会减少不会新增。不会,因为在迁移时,首先会从ht[0]读取数据,如果ht[0]读不到,则会去ht[1]读。

L的博客 3192

Redis Cluster线上扩容

前言: 很多文章及自带管理工具都是免密码扩容,但是线上环境怎么能少了密码呢。以下为针对带密码集群扩容的探索: 概念 去中心、去中间件,各节点平等,保存各自数据和集群状态,节点间活跃互连。 传统用一致性哈希分配数据,集群用哈希槽(hash slot)分配。 算法为CRC16。 默认分配16384个slot, 用CRC16算法取模{ CRC16(key)%16384 }计算所属slot。 最少3个主节点 migrating 与 importing 默认slots分配 image.png

疯一样的女子 1604
上一篇: Redis——集群搭建及选举原理
下一篇: Redis——如何应对缓存同步,缓存穿透,缓存击穿,缓存雪崩问题
_Romeo
_Romeo 优质创作者: 后端开发技术领域 优质创作者: 后端开发技术领域
博客等级 码龄8年 2万+粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Romeo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值