Redis 大 key 问题 & 问题分析 & 解决方案
Redis 大 key 问题 & 问题分析 & 解决方案
Redis


什么是 Redis 大 key
- 单个key 存储的 value 很大
- hash, set,zset,list 结构中存储过多的元素
可能存在 Redis 大 key 的业务场景
1.配送范围特别大的门店
2.促销活动特别多的门店、商家等
3.高频用户下的订单列表
...
Redis 大 key 的危害
OPS 低也会导致内存占用多、流量大; 比如一次取走100K的数据,当OPS为1000时,就会产生100M/s的流量;
如果为 list,hash 等数据结构,大量的 elements 需要多次遍历,多次系统调用拷贝数据消耗时间;
主动删除、被动过期删除、数据迁移等,由于处理这一个KEY时间长,导致服务端发生阻塞;
如何找出 Redis 大 key
jimdb 管理端,拓扑Tab页,点击实例可以使用 Redis 大 key 扫描功能,该功能底层使用 scan 扫描所有 key,会影响实例性能, 选择在业务低峰进行;
redis 可使用 redis-cli 的 “--bigkeys” 选项查找大Key
如何解决 Redis 大 key 问题
对于需要整取 value 的 大 key, 可以尝试将对象分拆成几个 key-value, 使用 multiGet 获取值,这样分拆的意义在于分拆单次操作的压力,将操作压力平摊到多个实例中,降低对单个实例的IO影响;
对于每次需要取部分 value 的 大 key, 同样可以拆成几个 key-value,也可以将这些存储在一个 hash 中,每个 field 代表具体属性,使用 hget,hmget 来获取部分 value,使用 hset,hmset 来更新部分属性;
对于 value 中存储过多元素的 key, 同样可以将这部分元素拆分;
以 hash为例,正常的流程是:
hget(hashKey, field);
hset(hashKey, field, value);
现在可以固定一个桶数量,比如 1w,
每次存取的时候,先在本地计算field的hash值,
对 1w取模,确定 field落在哪个 key 上:
newHashKey = hashKey + (hash(field) % 10000);
hset(newHashKey, field, value);
hget(newHashKey, field);
set,zset,list 做法类似
QPS
Queries Per Second /
https://en.wikipedia.org/wiki/Queries_per_second
refs
https://www.jianshu.com/p/c934ddbdd5de
https://juejin.im/post/6844903954988400648
https://www.jianshu.com/p/c286ad666158
https://xhinliang.win/2018/10/30/distributed/big-key-in-redis/
xgqfrms 2012-2020
www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!
Redis 大 key 问题 & 问题分析 & 解决方案的更多相关文章
- Redis大 key的发现与删除方法全解析
个推作为国内第三方推送市场的早期进入者,专注于为开发者提供高效稳定的推送服务,经过9年的积累和发展,服务了包括新浪.滴滴在内的数十万APP.由于我们推送业务对并发量.速度要求很高,为此,我们选择了高性 ...
- Redis大key的发现与删除方法全解析
个推作为国内第三方推送市场的早期进入者,专注于为开发者提供高效稳定的推送服务,经过9年的积累和发展,服务了包括新浪.滴滴在内的数十万APP.由于我们推送业务对并发量.速度要求很高,为此,我们选择了高性 ...
- Redis 大 key 问题总结
多大的 key 算大? 阿里云Redis 最佳实践中提到 合理的 Key 中 Value 的字节大小,推荐小于10 KB.过大的 Value 会引发数据倾斜.热点Key.实例流量或 CPU 性能被占满 ...
- 深度评测丨 GaussDB(for Redis) 大 Key 操作的影响
本文分享自华为云社区<墨天轮评测:GaussDB(for Redis)大Key操作的影响>,作者: 高斯 Redis 官方博客. 在前一篇文章<墨天轮评测:GaussDB(for R ...
- 统计redis大key信息(前topN)
相关包下载链接 https://github.com/sripathikrishnan/redis-rdb-tools/releaseshttps://pypi.org/project/python- ...
- Redis热点Key发现及常见解决方案!
一.热点Key问题产生的原因 1.用户消费的数据远大于生产的数据(热卖商品.热点新闻.热点评论.明星直播). 在日常工作生活中一些突发的的事件,例如:双十一期间某些热门商品的降价促销,当这其中的某一件 ...
- redis 删除大key集合的方法
redis大key,这里指的是大的集合数据类型,如(set/hash/list/sorted set),一个key包含很多元素.由于redis是单线程,在删除大key(千万级别的set集合)的时候,或 ...
- 如何提取Redis中的大KEY
工作中,经常有些Redis实例使用不恰当,或者对业务预估不准确,或者key没有及时进行处理等等原因,导致某些KEY相当大. 那么大Key会带来哪些问题呢? 如果是集群模式下,无法做到负载均衡,导致请求 ...
- Redis 的大 Key 对持久化有什么影响?
作者:小林coding 图解计算机基础(操作系统.计算机网络.计算机组成.数据库等)网站:https://xiaolincoding.com 大家好,我是小林. 上周有位读者字节一二面时,被问到:Re ...
随机推荐
- testng学习笔记-- beforesuit和aftersuit
一.定义 测试套件,主要关注执行顺序 套件:suit可以包含多个class 二.代码标签 三.运行结果
- webmvc 拦截器 允许跨域 跨域问题 sessionid不一样
package cn.com.yitong.ares.filter; import java.io.IOException; import javax.servlet.Filter;import ja ...
- LOJ10201
题目描述 原题来自:Codeforces Round #400 B. Sherlock 有了一个新女友(这太不像他了!).情人节到了,他想送给女友一些珠宝当做礼物. 他买了n 件珠宝.第i 件的价 ...
- docker基本使用-nginx
在docker环境中部署使用nginx 1,安装nginx docker pull nginx 2,随便启动一下nginx,测试是否安装成功 a,启动nginx sudo docker run --n ...
- Spring5源码,@Autowired
一.@Autowired所具有的功能 二.在Spring中如何使用@Autowired 三.@Autowired注解背后的工作原理 一.@Autowired所具有的功能 @Autowired是一个用来 ...
- Spark练习之创建RDD(集合、本地文件),RDD持久化及RDD持久化策略
Spark练习之创建RDD(集合.本地文件) 一.创建RDD 二.并行化集合创建RDD 2.1 Java并行创建RDD--计算1-10的累加和 2.2 Scala并行创建RDD--计算1-10的累加和 ...
- telnet | ping
ping通常是用来检查网络是否通畅或者网络连接速度的命令. ping www.baidu.com 而telnet是用来探测指定ip是否开放指定端口的. telnet xxx 443 查看443开放没 ...
- Mysql:好好的索引,为什么要下推?
前段时间有读者提议讲讲索引下推,这期就把这事儿安排上.多余的前言就不赘述了,我们直接开始. 列位坐好! 图注:思维导图 回表操作 对于数据库来说,只要涉及到索引,必然绕不过去回表操作.当然这也是我们今 ...
- java.awt.event.MouseEvent鼠标事件的定义和使用 以及 Java Swing-JTextArea的使用
最近发现一个CSDN大佬写的Java-Swing全部组件的介绍:Java Swing 图形界面开发(目录) JTextArea 文本区域.JTextArea 用来编辑多行的文本.JTextArea 除 ...
- 【poj 1984】&【bzoj 3362】Navigation Nightmare(图论--带权并查集)
题意:平面上给出N个点,知道M个关于点X在点Y的正东/西/南/北方向的距离.问在刚给出一定关系之后其中2点的曼哈顿距离((x1,y1)与(x2,y2):l x1-x2 l+l y1-y2 l),未知则 ...