iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >redis数据倾斜处理方法
  • 879
分享到

redis数据倾斜处理方法

redis数据倾斜redis数据倾斜处理 2022-12-20 12:12:32 879人浏览 安东尼
摘要

目录写在前面1:什么是数据倾斜2:数据量倾斜2.1:slot分配不均匀2.2:big key2.3:hash tag3:数据访问倾斜写在前面 我们在使用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数据倾斜内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: redis数据倾斜处理方法

本文链接: https://www.lsjlt.com/news/175344.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • redis数据倾斜处理方法
    目录写在前面1:什么是数据倾斜2:数据量倾斜2.1:slot分配不均匀2.2:big key2.3:hash tag3:数据访问倾斜写在前面 我们在使用Redis分片集群时,集群最好...
    99+
    2022-12-20
    redis数据倾斜 redis数据倾斜处理
  • Hive数据倾斜的概念及处理方式
    本篇内容主要讲解“Hive数据倾斜的概念及处理方式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hive数据倾斜的概念及处理方式”吧!Hive数据倾斜及处理① 数据倾斜的概念及原因1.1 数据倾...
    99+
    2023-06-19
  • 开发如何避免redis集群访问倾斜和数据倾斜
    概述redis 集群部署方式大部分采用类 Twemproxy 的方式进行部署。即通过 Twemproxy 对 redis key 进行分片计算,将 redis key 进行分片计算,分配到多个 redis 实例中的其中一个。tewmprox...
    99+
    2023-05-23
    redis nosql php go
  • html设置倾斜的方法
    本篇内容介绍了“html设置倾斜的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!html设置倾斜的方法...
    99+
    2024-04-02
  • Oracle中利用函数索引处理数据倾斜案例
        本文参考realkid4的博客: http://blog.itpub.net/17203031/viewspace-681311/ ...
    99+
    2024-04-02
  • Spark中的数据倾斜是指什么
    Spark中的数据倾斜是指在数据处理过程中,部分数据分区中的数据量远远超过其他分区,导致任务的执行时间不均匀,部分节点负载过重,影响...
    99+
    2024-03-05
    Spark
  • 什么是Spark中的数据倾斜调优
    数据倾斜调优是指在Spark中处理数据时,由于数据分布不均匀导致部分任务处理的数据量远远超过其他任务,从而影响整体作业的性能和效率。...
    99+
    2024-03-05
    Spark
  • Spark Streaming+Spark SQL的数据倾斜示例分析
    这篇文章将为大家详细讲解有关Spark Streaming+Spark SQL的数据倾斜示例分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.现象 三台机器都有产生executor,每台...
    99+
    2023-06-03
  • hadoop如何通过cachefile来避免数据倾斜
    这篇文章主要介绍了hadoop如何通过cachefile来避免数据倾斜,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。package hello_hadoop;imp...
    99+
    2023-06-02
  • Spark中有哪些数据倾斜优化策略
    在Spark中有多种数据倾斜优化策略,以下是一些常见的策略: 数据预处理:在进行数据处理之前,可以对数据进行预处理,将数据进行切...
    99+
    2024-03-04
    Spark
  • Oracle数据倾斜导致的问题-有绑定变量
    Oracle 数据倾斜导致的问题 - 有绑定变量 参考整理---<< 恩墨年货   -SQL 与性能优化   >> 场景二: ...
    99+
    2024-04-02
  • redis处理热点数据的方法是什么
    Redis处理热点数据的方法有多种,下面是一些常用的方法: 使用缓存:将热点数据存储在Redis缓存中,以提高访问速度。当查询热...
    99+
    2024-04-09
    redis
  • Redis序列化数据处理的方法是什么
    Redis序列化数据处理的方法有两种:一种是使用Redis自带的序列化工具,另一种是使用自定义的序列化工具。 使用Redis自带...
    99+
    2024-04-29
    Redis
  • 简述Java图像倾斜方法及实例 原创
            可以使用 graphics2D 类提供的 shear() 方法设置绘图的倾斜方向,从而使图像实现倾斜的效果。下面,我们一起来看一下它的使用方法和实例。&n...
    99+
    2023-05-31
    java 图像倾斜 fo
  • redis脏数据怎么处理
    处理 Redis 脏数据的方法主要有以下几种: 定期清理:定期执行 Redis 的数据清理操作,可以通过设置过期时间或者使用持久...
    99+
    2024-04-09
    redis
  • redis删数据的方法
    这篇文章主要介绍redis删数据的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Redis常用的删除策略有以下三种:1.被动删除(惰性删除):当读/写一个已经过期的Key时,会触...
    99+
    2024-04-02
  • redis热点数据怎么处理
    处理 Redis 热点数据的方法有以下几种: 增加 Redis 的容量:通过增加 Redis 的内存大小,可以容纳更多的热点数据...
    99+
    2023-10-27
    redis
  • redis数据丢失如何处理
    当Redis发生数据丢失时,以下是一些处理方法:1. 定位问题:首先要确定数据确实丢失了,可以通过查看Redis的日志文件来确认是否...
    99+
    2023-09-16
    redis
  • Oracle 处理json数据的方法
    目录备注:一. Json数据存储二. Json数据insert三. json数据update四. json数据查询五. 常用的json函数5.1 json_array5.2...
    99+
    2022-11-13
    Oracle 处理json数据 Oracle  json数据
  • Oracle 处理json数据的方法
    目录备注:一. json数据存储二. Json数据insert三. json数据update四. json数据查询五. 常用的json函数5.1 json_array5.2 JSON_ARRAYAGG5.3 J...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作