目录

一、什么是热Key?

二、热Key产生的原因?

三、热点Key的危害?

四、如何识别热点Key?

五、如何解决热Key问题?


一、什么是热Key?

在Redis中,我们把访问频率高的Key,称为热Key。比如突然又几十万的请求去访问redis中某个特定的Key,那么这样会造成redis服务器短时间流量过于集中,很可能导致redis的服务器宕机。那么接下来对这个Key的请求,都会直接请求到我们的后端数据库中,数据库性能本来就不高,这样就可能直接压垮数据库,进而导致后端服务不可用。

二、热Key产生的原因?

  • 1、用户消费的数据远大于生产的数据,如商品秒杀、热点新闻、热点评论等读多写少的场景。

双十一秒杀商品,短时间内某个爆款商品可能被点击/购买上百万次,或者某条爆炸性新闻等被大量浏览,此时会造成一个较大的请求Redis量,这种情况下就会造成热点Key问题。

  • 2、请求分片集中,超过单台Redis服务器的性能极限。

在服务端读数据进行访问时,往往会对数据进行分片切分,例如采用固定Hash分片,hash落入同一台redis服务器,如果瞬间访问量过大,超过机器瓶颈时,就会导致热点 Key 问题的产生。

三、热点Key的危害?

  • 1、缓存击穿,压垮redis服务器,导致大量请求直接发往后端服务,并且DB本身性能较弱,很可能进一步导致后端服务雪崩。

四、如何识别热点Key?

  • 1、凭借个人经验,结合业务场景,判断哪些是热Key。

比如,双十一大促的时候,苹果手机正在秒杀,那么我们可以判断苹果手机这个sku就是热Key。

  • 2、使用redis之前,在客户端写程序统计上报。

修改我们的业务代码,在操作redis之前,加入Key使用次数的统计逻辑,定时把收集到的数据上报到统一的服务进行聚合计算,这样我们就可以找到那些热点Key。缺点就是对我们的业务代码有一定的侵入性。

  • 3、服务代理层上报。

这个要看具体公司redis集群架构是怎么样的,如果是在redis前面有一个代理层,那么我们可以在代理层进行收集上报,也是可以找到热点Key。如下这种架构:

这种方式确定也很明显, 每个公司的架构不一样,并非都有Proxy代理这一层。

  • 4、使用redis自带的命令。

例如monitor、redis-cli加上--hotkeys选项等,不过这种方式执行起来很慢,可能会降低redis的处理请求的性能,慎用。

monitor命令:可以实时抓取出redis服务器接收到的命令,然后写代码统计出热Key,也有现成的分析工具可以使用。

  • 5、redis节点抓包分析。

自己写程序监听端口,解析数据,进行分析。

五、如何解决热Key问题?

  • 1、Redis集群扩容:增加分片副本,分摊客户端发过来的读请求;
  • 2、使用二级缓存,即JVM本地缓存,减少Redis的读请求。

例如使用Caffeine+redis 实现二级缓存,先从本地缓存中取,取不到再去redis中去取。当然也可以使用其它框架,如ehcache、甚至一个HashMap都可以。

Redis中什么是热Key问题?如何解决热Key问题?相关推荐

  1. Redis中存值是Hash冲突怎么解决的

    Redis 中的 Hash和 Java的 HashMap 更加相似,都是数组+链表的结构.当发生 hash 碰撞时将会把元素追加到链表上 我们先来了解下 hash 的内部结构.第一维是数组,第二维是链 ...

  2. 深入理解redis中的lua脚本

    本文来说下redis中的lua脚本 文章目录 概述 Lua简介 使用Lua脚本的好处 Redis+Lua实现限流 本文小结 概述 今天讲一些redis和lua脚本的相关的东西,lua这个脚本是一个好东 ...

  3. redis中的order set 有序集合

    redis中的order set 有序集合 命令 1 zadd key score1 value1 score2 value2 .. 添加元素 127.0.0.1:6379> zadd user ...

  4. Redis中的代理Sharding

    典型的代理分区方案有Twitter 开源的Twemproxy 和国内的豌豆荚开源的Codis. Twemproxy two-em-proxy https://github.com/twitter/tw ...

  5. redis——Redis中的LRU算法改进

    redis通常使用缓存,是使用一种固定最大内存的使用.当数据达到可使用的最大固定内存时,我们需要通过移除老数据来获取空间.redis作为缓存是否有效的重要标志是如何寻找一种好的策略:删除即将需要使用的 ...

  6. [转载] python怎么获取redis中的数据_python操作redis数据库

    参考链接: 使用Python在Selenium中进行非阻塞等待 3.redis基本命令 String set(name, value, ex=None, px=None, nx=False, xx=F ...

  7. Redis 热 Key 发现以及解决办法

    背景介绍 最近在技术交流微信群里看大家讨论技术,其中有谈到 Redis 热 Key 的一些问题解决方案,我也仔细思考了一下我们目前系统中 Redis 的使用场景,我们是不是也存在热 Key 问题,或者 ...

  8. redis一般用来干嘛_谈谈redis的热key问题如何解决

    公众号:孤独烟 ,作者:孤独烟 引言 今天我们来写redis方面的内容,谈谈热key问题如何解决. 其实热key问题说来也很简单,就是瞬间有几十万的请求去访问redis上某个固定的key,从而压垮缓存 ...

  9. 【原创】谈谈redis的热key问题如何解决

    ps:hot key和big key问题,大家一定要有所了解. 本文预计分为如下几个部分 热key问题 如何发现 业内方案 正文 – 热Key问题 上面提到,所谓热key问题就是,突然有几十万的请求去 ...

  10. 在Redis中设置了过期时间的Key,需要注意哪些问题?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:千山qianshan juejin.im/post/5d6b ...

最新文章

  1. keras 与tensorflow绑定在一起用的,何以见得
  2. 语义角色标注视为依存句法分析任务:探索论元内部的隐式树结构
  3. P2082 区间覆盖(加强版)
  4. mysql 多列union_Mysql联合查询UNION和UNION ALL的使用介绍
  5. 云南大学计算机调剂哪个方向比较容易,选择考研调剂,看准这几大调剂方向!...
  6. android 屏蔽焦点,android – 如何在视图失去焦点时屏蔽EditText中的文本.
  7. 移动硬盘提示格式化解决办法,未正确删除导致不能读取文件提示格式化解决方案
  8. MySql报1205:1205 - Lock wait timeout exceeded; try restarting transaction,出现1205如何解决
  9. httpf发送 json_Java用HttpClient4发送http/https协议get/post请求,发送map,json,xml,txt数据...
  10. 10款经典香水 怀旧十个年代-Part I
  11. 快速提高网站流量的外部链接发布与推广技巧
  12. 大学里 信息领域的专业 名称解释
  13. 给定两点确定一条直线
  14. 51单片机笔记:定时器/计数器
  15. 计算机一级真题模拟试题,2016年3月计算机一级真题模拟试题及答案.doc
  16. Hallucination in NLP(自然语言处理中的幻觉现象)
  17. ubuntu中软件安装方法
  18. java转发乬数据,Java流编程实例及代码
  19. mysql的join三种算法_MySQL系列(九)---MySQL几种JOIN算法
  20. Android 自定义View之随机数验证码(仿写鸿洋)

热门文章

  1. 程序员转行去做售前、咨询
  2. 第一次进入页面,访问服务器图片报404,刷新或者回退重新进入,就可以加载图片。
  3. in作为介词的用法_介词in,on,at的具体用法与区分
  4. 二分法和黄金分割法的区别和联系,附Python代码
  5. excel自动换行_Excel如何自动换行?
  6. java代码实现kafka消费端consumer的from-beginning功能
  7. xt.loadOnStartup web应用程序[]中的Servlet[springmvc]引发了load()
  8. APK 签名:v1 v2 v3 v4
  9. SCI论文写作(一) | SCI论文的文献综述(Literature Review)部分
  10. Java函数式编程与Lambda表达式