我的编程空间,编程开发者的网络收藏夹
学习永远不晚

redis数据倾斜处理方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

redis数据倾斜处理方法

写在前面

我们在使用Redis分片集群时,集群最好的状态就是每个实例可以处理相同或相近比例的请求,但如果不是这样,则会出现某些实例压力特别大,而某些实例特别空闲的情况发生,本文就一起来看下这种情况是如何发生的以及如何处理。

1:什么是数据倾斜

数据倾斜分为两种,第一种是数据量倾斜,第二种是数据访问倾斜,定义如下:

  • 数据量倾斜:数据分布的不均匀,导致某些实例数据特别多,进而导致处理的请求量大
  • 数据访问倾斜:数据分布均匀,但是某些实例存在热点数据,进而导致处理的请求量大

可以看到不管是数据量倾斜,还是数据访问倾斜,最终导致的结果都是发生倾斜的实例处理了更多的数据请求,压力增大。

2:数据量倾斜

在这里插入图片描述

数据量倾斜最常见的原因就是在手动划分slot时,分配不均匀,除此之外,还有big key,hash tag,分别来看下。

2.1:slot分配不均匀

slot分配不均匀一般是由于手动分配造成,或者是因为某个实例节点配置较高,为了更加充分的利用其计算机资源,有意的给其分配更多的slot,但是这个多出的量其实是不好预估的,所以对于因为计算机性能差异有意分配的造成的slot不均匀还是要尽量避免,即保证所有的实例节点都具有相同的配置,然后将slot进行均匀分配。如果是已经发生了slot分配不均匀,我们可以通过迁移slot的方式来处理,首先通过cluster slots命令查看当前slot的分配情况:

在这里插入图片描述

上图slot0~4095分配到了实例192.168.10.3:6379,slot12288~16383分配到了实例192.168.10.5:6379。如下是一个slot迁移的例子。

假设我们要把 Slot 300 从源实例(ID 为 3)迁移到目标实例(ID 为 5),那要怎么做呢?

第1步,我们先在目标实例5上执行下面的命令,将Slot 300的源实例设置为实例 3,表示要从实例 3 上迁入 Slot 300。

在这里插入图片描述

第2步,在源实例 3 上,我们把 Slot 300 的目标实例设置为 5,这表示,Slot 300 要迁出到实例 5 上,如下所示:

在这里插入图片描述

第3步,从 Slot 300 中获取 100 个 key。因为 Slot 中的 key 数量可能很多,所以我们需要在客户端上多次执行下面的这条命令,分批次获得并迁移 key。

在这里插入图片描述

第4步,我们把刚才获取的 100 个 key 中的 key1 迁移到目标实例 5 上(IP 为 192.168.10.5),同时把要迁入的数据库设置为 0 号数据库,把迁移的超时时间设置为 timeout。我们重复执行 MIGRATE 命令,把 100 个 key 都迁移完。

在这里插入图片描述

最后,我们重复执行第 3 和第 4 步,直到 Slot 中的所有 key 都迁移完成。

从Redis3.0.6开始,你也可以使用KEYS选项,一次迁移多个key(key1、2、3),这样可以提升迁移效率。

在这里插入图片描述

2.2:big key

bigkey,主要包括string的值特别大,和集合类型的元素特别多两种情况,对于string,我们需要在业务上处理,分散到多个key存储,然后在业务上多次获取,并进行合并,比如如下划分:

key:
    names
划分为
key:
    name:1_1000 ... name:100001_101001 

其实这里是用到了分片的思想,对于集合的处理方式和string也是类似的,比如有一个包含100万个元素的hash集合user:info,分片存储后如下:

key: 
    user:info
key: 
    user:info:1_100000,user:info:100001_20000,...,user:info:900001_1000000

对于bigkey我们还是要在业务上尽量避免,因为bigkey的副作用不仅仅如此,还有如数据同步慢,数据恢复慢,删除慢等。

2.3:hash tag

我们正常设置key,计算其slot值的方式是crc16(key)%16384,但是如果是使用了{},比如keypart1:{keypart2},则计算的逻辑就变成了crc16(keypart2)%16384,一般用在希望某几类key分布到同一个实例,进而可以方便的进行某些操作的场景,如事务,简单的计算等,但是一般带来的的负面影响要比收益大的多,比如造成这里分析的数据倾斜问题,数据倾斜影响的是整个Redis实例,影响更大,所以在实践中要尽量避免使用hash tag。

3:数据访问倾斜

在这里插入图片描述

数据访问倾斜出现的场景一般就是热点数据,比如首页的新闻,某明星出轨离婚等爆点新闻,对于这类问题一般有如下的解决方法:

1:拷贝几份数据,以分散到不同的实例
    比如news:1,可以虚拟出几份数据,如news:1:A,news:1:B,...news:1:Z,客户端访问时随机的增加A~Z的后缀,分散压力,这种方法可以用于只读的热点数据
2:增加机器配置
    这种方法是针对读写数据,因为如果是按照方案1,数据的一致性将会带来额外的性能开销,以及更多潜在的bug。

到此这篇关于redis之数据倾斜如何处理的文章就介绍到这了,更多相关redis数据倾斜内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

redis数据倾斜处理方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

redis数据倾斜处理方法

我们在使用Redis分片集群时,集群最好的状态就是每个实例可以处理相同或相近比例的请求,但如果不是这样,则会出现某些实例压力特别大,而某些实例特别空闲的情况发生,本文就一起来看下这种情况是如何发生的以及如何处理
2022-12-20

Hive数据倾斜的概念及处理方式

本篇内容主要讲解“Hive数据倾斜的概念及处理方式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hive数据倾斜的概念及处理方式”吧!Hive数据倾斜及处理① 数据倾斜的概念及原因1.1 数据倾
2023-06-19

开发如何避免redis集群访问倾斜和数据倾斜

概述redis 集群部署方式大部分采用类 Twemproxy 的方式进行部署。即通过 Twemproxy 对 redis key 进行分片计算,将 redis key 进
2023-05-23

Spark作业在Ubuntu上的数据倾斜处理

在Ubuntu上处理Spark作业的数据倾斜问题,可以采取以下几种策略:重新分区:通过增加分区数量,可以使得数据更加均匀地分布在各个分区中,从而减少数据倾斜的影响。可以使用repartition()或coalesce()方法来调整分区数量。
Spark作业在Ubuntu上的数据倾斜处理
2024-10-22

浅析Redis 切片集群的数据倾斜问题

目录Redis 中如何应对数据倾斜什么是数据倾斜数据量倾斜bigkey导致倾斜Slot分配不均衡导致倾斜Hash Tag导致倾斜数据访问倾斜总结参考Redis 中如何应对数据倾斜什么是数据倾斜如果 Redis 中的部署,采用的是切片集群
2022-06-22

redis处理热点数据的方法是什么

Redis处理热点数据的方法有多种,下面是一些常用的方法:使用缓存:将热点数据存储在Redis缓存中,以提高访问速度。当查询热点数据时,首先检查缓存中是否存在该数据,如果存在则直接返回缓存中的数据,否则从数据库中获取数据并存入缓存。使用Ha
redis处理热点数据的方法是什么
2024-04-09

Redis序列化数据处理的方法是什么

Redis序列化数据处理的方法有两种:一种是使用Redis自带的序列化工具,另一种是使用自定义的序列化工具。使用Redis自带的序列化工具:Redis支持多种序列化格式,包括JSON、MsgPack、Protobuf等。可以通过配置Redi
Redis序列化数据处理的方法是什么
2024-04-29

redis脏数据怎么处理

处理 Redis 脏数据的方法主要有以下几种:定期清理:定期执行 Redis 的数据清理操作,可以通过设置过期时间或者使用持久化方式来处理脏数据。使用数据结构:使用合适的数据结构来存储数据,避免出现脏数据的情况。监控和报警:定期监控 Red
redis脏数据怎么处理
2024-04-09

Oracle 处理json数据的方法

Json数据一般使用varchar2(400),varchar2(32676)或者BLOB来存储Json数据,这篇文章主要介绍了Oracle 处理json数据的相关知识,需要的朋友可以参考下
2022-11-13

redis数据丢失怎么处理

处理 Redis 数据丢失的方法:检查 Redis 配置文件:首先检查 Redis 的配置文件是否正确配置了持久化选项,包括 RDB 持久化和 AOF 持久化。如果没有配置持久化选项,可以在配置文件中添加相应的选项。检查 Redis 内存:
redis数据丢失怎么处理
2024-04-19

redis数据丢失如何处理

当Redis发生数据丢失时,以下是一些处理方法:1. 定位问题:首先要确定数据确实丢失了,可以通过查看Redis的日志文件来确认是否发生了数据丢失。如果日志文件没有记录对应的操作,则可能是数据丢失。2. 数据备份:如果数据丢失可能对业务造成
2023-09-16

redis热点数据怎么处理

处理 Redis 热点数据的方法有以下几种:增加 Redis 的容量:通过增加 Redis 的内存大小,可以容纳更多的热点数据,从而减少热点数据的失效率。可以通过扩展 Redis 的内存,或者使用 Redis Cluster 来增加容量。使
2023-10-27

VB.NET文件处理数据的方法

本篇内容介绍了“VB.NET文件处理数据的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!VB.NET文件处理代码:打开csv文件 Pr
2023-06-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录