iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Redis热点数据问题怎么解决
  • 498
分享到

Redis热点数据问题怎么解决

2024-04-02 19:04:59 498人浏览 薄情痞子
摘要

这篇文章主要介绍“Redis热点数据问题怎么解决”,在日常操作中,相信很多人在Redis热点数据问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Redis热点数据问

这篇文章主要介绍“Redis热点数据问题怎么解决”,在日常操作中,相信很多人在Redis热点数据问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Redis热点数据问题怎么解决”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Redis热点数据问题怎么解决

1、面试官:你在项目中有没有遇到 Redis 热点数据问题,一般都是什么原因引起的?

问题分析:上次听群里大佬面试阿里 p7 就被问到这个问题,难度指数五颗星,对我等小白着实是加分项。

答:关于热点数据问题我有话要说,这个问题我早在刚刚学习使用 Redis 时就从已经意识到了,所以在使用时会刻意避免,坚决不会给自己挖坑,热点数据最大的问题会造成 Reids 集群负载不均衡(也就是数据倾斜)导致的故障,这些问题对于 Redis 集群都是致命打击。

先说说造成 Reids 集群负载不均衡故障的主要原因:

  1. 高访问量的 Key,也就是热 key,根据过去的维护经验一个 key 访问的 QPS 超过 1000 就要高度关注了,比如热门商品,热门话题等。

  2. 大 Value,有些 key 访问 QPS 虽然不高,但是由于 value 很大,造成网卡负载较大,网卡流量被打满,单台机器可能出现千兆 / 秒,io 故障。

  3. 热点 Key + 大 Value 同时存在服务器杀手。

那么热点 key 或大 Value 会造成哪些故障呢:

  1. 数据倾斜问题:大 Value 会导致集群不同节点数据分布不均匀,造成数据倾斜问题,大量读写比例非常高的请求都会落到同一个 redis server 上,该 redis 的负载就会严重升高,容易打挂。

  2. QPS 倾斜:分片上的 QPS 不均。

  3. 大 Value 会导致 Redis 服务器缓冲区不足,造成 get 超时。

  4. 由于 Value 过大,导致机房网卡流量不足。

  5. Redis 缓存失效导致数据库层被击穿的连反应。

2、面试官:真实项目中,那热点数据问题你是如何准确定位的呢?

答:这个问题的解决办法比较宽泛,要具体看不同业务场景,比如公司组织促销活动,那参加促销的商品肯定是有办法提前统计的,这种场景就可以通过预估法。对于突发事件,不确定因素,Redis 会自己监控热点数据。大概归纳下:

  1. 提前获知法:
    根据业务,人肉统计 or 系统统计可能会成为热点的数据,如,促销活动商品,热门话题,节假日话题,纪念日活动等。

  2. Redis 客户端收集法:
    调用端通过计数的方式统计 key 的请求次数,但是无法预知 key 的个数,代码侵入性强。

    public Connection sendCommand(final ProtocolCommand cmd, final byte[]... args) {
        //从参数中获取key
        String key = analysis(args);
        //计数
        counterKey(key);
        //ignore
    }
  3. Redis 集群代理层统计:
    像 Twemproxy,codis 这些基于代理的 Redis 分布式架构,统一的入口,可以在 Proxy 层做收集上报,但是缺点很明显,并非所有的 Redis 集群架构都有 proxy。

    Redis热点数据问题怎么解决

  4. Redis 服务端收集:
    监控 Redis 单个分片的 QPS,发现 QPS 倾斜到一定程度的节点进行 monitor,获取热点 key, Redis 提供了 monitor 命令,可以统计出一段时间内的某 Redis 节点上的所有命令,分析热点 key,在高并发条件下,会存在内存暴涨和 Redis 性能的隐患,所以此种方法适合在短时间内使用;同样只能统计一个 Redis 节点的热点 key,对于集群需要汇总统计,业务角度讲稍微麻烦一点。

    Redis热点数据问题怎么解决

    以上为说的这 4 个方法都是现在业界比较常用的,方法,我通过学习 Redis 源码还有一个新的想法。第 5 种:修改 Redis 源码。

  5. 修改 Redis 源代码:(从读源码中想到的思路)

    我发现 Redis4.0 为我们带来了许多新特性,其中便包括基于 LFU 的热点 key 发现机制,有了这个新特性,我们就可以在此基础上实现热点 key 的统计,这个只是我的个人思路。

    面试官心理:小伙子还挺有想法,思路挺开阔,还打起了修改源码的注意,我都没这个野心。团队里就需要这样的人。

    (发现问题,分析问题,解决问题,不等面试官发问,直接讲述如何解决热点数据问题,这才是核心内容)

3、如何解决热点数据问题

答:关于如何治理热点数据问题,解决这个问题主要从两个方面考虑,第一是数据分片,让压力均摊到集群的多个分片上,防止单个机器打挂,第二是迁移隔离。

概括总结:

  1. key 拆分
    如果当前 key 的类型是一个二级数据结构,例如哈希类型。如果该哈希元素个数较多,可以考虑将当前 hash 进行拆分,这样该热点 key 可以拆分为若干个新的 key 分布到不同 Redis 节点上,从而减轻压力

  2. 迁移热点 key:
    以 Redis Cluster 为例,可以将热点 key 所在的 slot 单独迁移到一个新的 Redis 节点上,这样这个热点 key 即使 QPS 很高,也不会影响到整个集群的其他业务,还可以定制化开发,热点 key 自动迁移到独立节点上,这种方案也较多副本

  3. 热点 key 限流:
    对于读命令我们可以通过迁移热点 key 然后添加从节点来解决,对于写命令我们可以通过单独针对这个热点 key 来限流。

  4. 增加本地缓存:
    对于数据一致性不是那么高的业务,可以将热点 key 缓存到业务机器的本地缓存中,因为是业务端的本地内存中,省去了一次远程的 IO 调用。但是当数据更新时,可能会造成业务和 Redis 数据不一致。

面试官:你回答得很好,考虑得很全面。

4、面试官:关于 Redis 最后一个问题,Redis 支持丰富的数据类型,那么这些数据类型存储的大 Value 如何解决,线上有遇到这种情况吗?

问题分析:相比热点 key 大概念,大 Value 的概念比好好理解,由于 Redis 是单线程运行的,如果一次操作的 value 很大会对整个 redis 的响应时间造成负面影响,因为 Redis 是 Key - Value 结构数据库,大 value 就是单个 value 占用内存较大,对 Redis 集群造成最直接的影响就是数据倾斜

答:(想难倒我?我可是有备而来。)

我先说说多大的 Value 算大,根据公司基础架构给出的经验值可做以下划分:

注:(经验值不是标准,都是根据集群运维人员长期观察线上 case 总结出来的)

  1. :string 类型 value > 10K,set、list、hash、zset 等集合数据类型中的元素个数 > 1000。

  2. 超大: string 类型 value > 100K,set、list、hash、zset 等集合数据类型中的元素个数 > 10000。

由于 Redis 是单线程运行的,如果一次操作的 value 很大会对整个 redis 的响应时间造成负面影响,所以,业务上能拆则拆,下面举几个典型的分拆方案:

  1. 一个较大的 key-value 拆分成几个 key-value ,将操作压力平摊到多个 redis 实例中,降低对单个 redis 的 IO 影响

  2. 将分拆后的几个 key-value 存储在一个 hash 中,每个 field 代表一个具体的属性,使用 hget,hmget 来获取部分的 value,使用 hset,hmset 来更新部分属性。

  3. hash、set、zset、list 中存储过多的元素

类似于场景一中的第一个做法,可以将这些元素分拆。

以 hash 为例,原先的正常存取流程是:

hget(hashKey, field); 
hset(hashKey, field, value)

现在,固定一个桶的数量,比如 10000,每次存取的时候,先在本地计算 field 的 hash 值,模除 10000,确定该 field 落在哪个 key 上,核心思想就是将 value 打散,每次只 get 你需要的。

newHashKey = hashKey + (hash(field) % 10000); 
hset(newHashKey, field, value); 
hget(newHashKey, field)

到此,关于“Redis热点数据问题怎么解决”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

您可能感兴趣的文档:

--结束END--

本文标题: Redis热点数据问题怎么解决

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

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

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

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

下载Word文档
猜你喜欢
  • Redis热点数据问题怎么解决
    这篇文章主要介绍“Redis热点数据问题怎么解决”,在日常操作中,相信很多人在Redis热点数据问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Redis热点数据问...
    99+
    2022-10-19
  • Redis中热点key存储问题怎么解决
    今天小编给大家分享一下Redis中热点key存储问题怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一...
    99+
    2022-10-19
  • Redis什么是热Key问题以及如何解决热Key问题
    目录一、什么是热Key?二、热Key产生的原因?三、热点Key的危害?四、如何识别热点Key?五、如何解决热Key问题?一、什么是热Key? 在Redis中,我们把访问频率高的Key,称为热Key。 比如突然又几十万的请...
    99+
    2022-11-18
    Redis热Key 解决热Key问题 Redis什么是热Key
  • redis热点数据怎么处理
    处理 Redis 热点数据的方法有以下几种: 增加 Redis 的容量:通过增加 Redis 的内存大小,可以容纳更多的热点数据...
    99+
    2023-10-27
    redis
  • redis中热key问题的解决方法
    这篇文章主要介绍了redis中热key问题的解决方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。正文热Key问题上面提到,所谓热key问题...
    99+
    2022-10-18
  • Redis热点 Key 问题发现与5种解决方案是什么
    本篇文章给大家分享的是有关Redis热点 Key 问题发现与5种解决方案是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。热点问题产生的原因...
    99+
    2022-10-19
  • redis热点数据是什么意思
    这篇文章给大家分享的是有关redis热点数据是什么意思的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。“这个商品不错,大家来看啊“,每个平台都有会有些大卖的商品,简称为爆品。这些商...
    99+
    2022-10-18
  • 怎么解决redis数据过多内存过大问题
    怎么解决redis数据过多内存过大问题?针对这个问题,这篇文章给出了相对应的分析和解答,希望能帮助更多想解决这个问题的朋友找到更加简单易行的办法。redis这个内存数据库,它的高性能、稳定性都是不用怀疑的,...
    99+
    2022-10-18
  • redis宕机后数据一致性问题怎么解决
    当Redis宕机后导致数据不一致的问题,可以通过以下几种方式解决:1. 持久化机制:Redis提供了RDB和AOF两种持久化机制。R...
    99+
    2023-09-05
    redis
  • MySQL和Redis的数据一致性问题怎么解决
    本篇内容主要讲解“MySQL和Redis的数据一致性问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL和Redis的数据一致性问题怎么解决”吧!前言:在数据读多写少的情况下作为...
    99+
    2023-06-29
  • Redis缓存问题怎么解决
    这篇文章主要讲解了“Redis缓存问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Redis缓存问题怎么解决”吧!LevelDB 来了!它是 Go...
    99+
    2022-10-19
  • 解决linux下redis数据库overcommit_memory问题
    背景 公司的redis有时background save db不成功,通过log发现下面的告警,很可能由它引起的: [13223] 17 Mar 13:18:02.207 # WAR...
    99+
    2022-11-13
  • SpringBoot怎么整合Redis实现热点数据缓存
    本篇内容主要讲解“SpringBoot怎么整合Redis实现热点数据缓存”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot怎么整合Redis实现热点数据缓存”吧!我们以IDEA ...
    99+
    2023-07-05
  • 怎样解决Redis的问题
    怎样解决Redis的问题,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Redis 本质上是一个 Key-Value 类型的内存...
    99+
    2022-10-19
  • Redis中怎么应对缓存热key问题
    这篇“Redis中怎么应对缓存热key问题”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“R...
    99+
    2022-10-19
  • 怎么解决Redis CPU高的问题
    怎么解决Redis CPU高的问题,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。问题描述: redis所在主机的OS cpu报...
    99+
    2022-10-19
  • Redis中怎么解决Big Key问题
    这篇文章主要介绍“Redis中怎么解决Big Key问题”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Redis中怎么解决Big Key问题”文章能帮助大家解决问题。一、什么是B...
    99+
    2023-07-05
  • Redis怎么管理热度数据
    这篇文章主要介绍“Redis怎么管理热度数据”,在日常操作中,相信很多人在Redis怎么管理热度数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Redis怎么管理热度数据”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-15
  • 如何解决win7无法创建wifi热点的问题
    这篇文章给大家分享的是有关如何解决win7无法创建wifi热点的问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、按“win+r”唤出运行,在运行内输入“servoces.msc”。二、在弹出的服务窗口中,按...
    99+
    2023-06-28
  • TiDB 4.0 为解决热点问题做了哪些改进?
    作者:李坤 热点问题概述 一直以来,TiDB 的数据访问热点问题,是用户比较关注的问题。为什么这个问题如此突出呢?这其实是“分布式”带来的结构效应。单机数据库由于只有一个节点,是不存在热点问题的(因为性能的上限就是单机的处理能力),而分布式...
    99+
    2018-10-21
    TiDB 4.0 为解决热点问题做了哪些改进?
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作