Redis中BigKey的判定查找建议
判定依据
- key本身的数据量过大:string类型的key它的值为5MB
- key中的成员数量过多:一个zset类型的key成员数量为10000个
- key中的成员数据量过大:一个hash类型的key他的成员只有1000个但是这些value总大小超过100MB
- 查看内存命令
127.0.0.1:6379> hset k1 name 123 age 123 sex 123 email 123@123
(integer) 1
127.0.0.1:6379> memory usage k1
(integer) 96
127.0.0.1:6379>
推荐
- 单个key的value小于10KB
- 对于集合类型的key建议元素数量小于1000
危害
- 网络阻塞
- 对于bigkey执行读请求时少量的QPS就可能导致带宽使用率被占满导致Redis实例 乃至物理机变慢
- 数据倾斜
- BigKey所在的Redis实例内存使用率远超其他使用率 无法使数据分片内存资源达到均衡
- Redis阻塞
- 对元素较多的hash list zset 等做运算耗时较多 使主线程被阻塞
- CPU压力
- BigKey的数据序列化和反系列化会导致CPU的使用率飙升 影响Redis实例和本机其他引用
查找BigKey
- redis-cli–bigkeys
[root@CentOS7 ~]# redis-cli --bigkeys# Scanning the entire keyspace to find biggest keys as well as
# average sizes per key type. You can use -i 0.1 to sleep 0.1 sec
# per 100 SCAN commands (not usually needed).[00.00%] Biggest hash found so far '"k1"' with 4 fields-------- summary -------Sampled 1 keys in the keyspace!
Total key length in bytes is 2 (avg len 2.00)Biggest hash found '"k1"' has 4 fields0 strings with 0 bytes (00.00% of keys, avg size 0.00)
0 lists with 0 items (00.00% of keys, avg size 0.00)
1 hashs with 4 fields (100.00% of keys, avg size 4.00)
0 streams with 0 entries (00.00% of keys, avg size 0.00)
0 sets with 0 members (00.00% of keys, avg size 0.00)
0 zsets with 0 members (00.00% of keys, avg size 0.00)
[root@CentOS7 ~]#
选择何时的数据结构
class user{private String name;private Integer age;
}
- JSON 优点:实现简单粗暴 缺点:数据耦合,不够灵活
user:1 {"name": "Jack", "age": 21}
- String 优点:可以灵活访问对象任意字段 缺点:占用空间大、没办法做统一控制
user:1:name Jack
user:1:age 21
- Hash 优点:底层使用ziplist,空间占用小,可以灵活访问对象的任意字段 缺点:代码相对复杂
user:1 name jackage 21
BigKey 案例
假如有hash类型的key,其中有100万对field和value,field是自增id,这个key存在什么问题?如何优化?
| key | field | value |
|---|---|---|
| someKey | id:0 | value0 |
| … | … | |
| id:999999 | value999999 |
- 方案一拆分为string类型
| key | value |
| — | — |
| id:0 | value0 |
| … | … |
| id:999999 | value999999 |
存在的问题:string结构底层没有太多内存优化,内存占用较多想要批量获取这些数据比较麻烦
- 方案二拆分为小的hash,将 id / 100 作为key, 将id % 100 作为field,这样每100个元素为一个Hash
| key | field | value |
| — | — | — |
| key:0 | id:00 | value0 |
| | … | … |
| | id:99 | value99 |
| key:1 | id:00 | value100 |
| | … | … |
| | id:99 | value199 |
| … | | |
| key:9999 | id:00 | value999900 |
| | … | … |
| | id:99 | value999999 |
相关文章:
Redis中BigKey的判定查找建议
判定依据 key本身的数据量过大:string类型的key它的值为5MBkey中的成员数量过多:一个zset类型的key成员数量为10000个key中的成员数据量过大:一个hash类型的key他的成员只有1000个但是这些value总大小超过100MB查看内存命令 127.0.0.1:6379> hset k1 name 123 age 123 sex…...
Swift-语法基础
一、声明 变量声明 以关键字 var 开头的声明引入变量,该变量在程序执行期间可以具有不同的值。 var str: String "hello" str "hello, world" 常量声明 以关键字 let 开头的声明引入只读常量,该常量只能被赋值一次。 let s…...
面向对象进阶:多态、内部类、常用API
目录 Java中的接口 Java中的内部类 常用API StringBuilder类 Java高级面向对象编程 在这篇博客文章中,我们将探索Java中的高级面向对象编程概念,包括接口、内部类和常用API。每个概念都将通过代码示例来演示它们的应用。 Java中的接口 什么是接口&…...
寸(英寸)、码、斤、公顷等日常中大概的换算单位你清楚吗
这些单位和概念是我们日常生活和工作中不可或缺的部分,理解它们的用途和转换关系可以让我们更有效地处理信息、进行交流和解决问题。 1、寸(英寸) 1寸(或英寸)等于0.0254米,2寸等于:20.0254&a…...
Python面试宝典第26题:最长公共子序列
题目 一个字符串的子序列是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。比如:"ace" 是 "abcde" 的子序列,但 "…...
接口测试学习笔记2
一、复习和扩展: 1、金字塔测试模型 UI测试 -- 黑盒 Service 服务层--函数之间的调用 灰盒 接口测试 Unit单元层--白盒测试 趋势:逐步向下发展 测试优先、测试驱动 -- 先考虑怎么测,再考虑怎么开发 满足软件测试的可控范围 2、…...
vue3修改带小数点的价格数字:小数点的前后数字,要分别显示成不同颜色和大小!已经封装成组件了!
需求: 修改带小数点的价格数字:小数点的前后数字,要分别显示成不同颜色和大小!已经封装成组件了! 效果: 前面大,后面小 代码: 组件: <!--修改小数点前后数字不同…...
JVM(Java虚拟机) - JVM内存分配与内存管理
作者:逍遥Sean 简介:一个主修Java的Web网站\游戏服务器后端开发者 主页:https://blog.csdn.net/Ureliable 觉得博主文章不错的话,可以三连支持一下~ 如有疑问和建议,请私信或评论留言! 前言 Java虚拟机&…...
Linux中vim的基本介绍和使用
善为理者,举其纲,疏其网。 vim 1、vim介绍2、命令模式详情3、底行模式详情4、困难问题5、历史存疑问题6、vim配置问题6、1、配置的原理6、2、一键式配置 1、vim介绍 如果我面想要在Linux上编写代码的话,我就需要vim来帮助我们编写代码。但是…...
宝塔面板上,安装rabbitmq
废话不多说,直接上干货! 第一步:登录宝塔账号,在软件商店里搜索 第二步:点击设置 第三步:已经完成了,还看啥!...
【Docker系列】Docker 镜像管理:删除无标签镜像的技巧
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
数据采集器
目录 1. 采集Redis 2. 采集MySQL 3. 采集容器 1. 采集Redis 出口商和集成 |普罗 米修斯 (prometheus.io) 发布 奥利弗006/redis_exporter (github.com) 在目标机器上安装redis 上传redis采集器包redis_exporter-v1.53.0.linux-amd64.tar.gz [rootharbor opt]# tar -xf …...
小红书0510笔试-编程题
解题思路: 先射击左边和先射击右边两种情况,就是2*1/n*(n-1)的概率。 解题思路: 枚举所有的评论作为最小值,按评论从大到小排序,每次遍历到的都是最小值。要想得到以该评论为最小值的最大优秀度,就要维护一…...
2024年热门开放式耳机评测!悠律、韶音、声阔到底该选谁?
开放式耳机选购技巧篇,可参考选购! 作为一名数码评测博主,这两年用过的开放式耳机不下50款了,市面上的开放式耳机众多,很多人不知道该如何选择,其实选购都是有一定的技巧和规律性的,看配置就能…...
计算机毕业设计选题推荐-智慧物业服务系统-Java/Python项目实战
✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…...
新手小白学习PCB设计,立创EDA专业版
本教程有b站某UP主的视频观后感 视频链接:http://【【教程】零基础入门PCB设计-国一学长带你学立创EDA专业版 全程保姆级教学 中文字幕(持续更新中)】https://www.bilibili.com/video/BV1At421h7Ui?vd_sourcefedb10d2d09f5750366f83c1e0d4a…...
查物流信息用什么软件
在电子商务日益繁荣的今天,快递物流信息的查询成为了我们日常生活中不可或缺的一部分。无论是网购达人还是商家,都需要随时掌握货物的物流动态。然而,如何快速、准确地查询物流信息却是一个令人头疼的问题。今天,我将为大家介绍一…...
(40)温度传感器
文章目录 前言 1 设置 2 记录 3 参数说明 前言 ArduPilot 已经有许多可能的温度报告来源:电调,智能电池,电机 EFI,这些独立的传感器可以用来取代 ArduPilot 中已经存在的那些设备温度报告。它们也可以只是被记录下来。 ArduP…...
【靶场实操】sql-labs通关详解----第二节:前端页面相关(Less-11-Less-17)
SQL注入攻击是一种针对Web应用程序的安全漏洞,那么自然,SQL注入攻击也和前端页面息息相关,用户输入未被正确处理、动态查询的构建、前端JavaScript代码错误,等等我问题都可能造成安全威胁。 在上一节,我们了解了基础的…...
样式与特效(2)——新闻列表
1.盒子模型的边距概念 ) Margin-top 上面 Margin-bottom 底部 Margin-right 右边 Margin-left 左边 Margin : 10px (上下左右都是10px) Margin :10px,20px (上下边距10px 左右20px) CSS里面最重要的属性之一 将页面理解成…...
收藏必看!2026 网安行业深度解析,人才缺口巨大,五大高薪技术方向详解
2026年网络安全行业迎来黄金发展期,全球人才缺口达480万,岗位年增37%,薪资普遍高于IT行业20%以上。热门方向包括AI安全、零信任架构、数据安全合规、云安全和工业互联网安全。入行可通过四大阶段系统学习:基础入门、技术进阶、高阶…...
分布式缓存策略:提升应用性能和可扩展性
分布式缓存策略:提升应用性能和可扩展性 一、分布式缓存概述 1.1 分布式缓存的定义 分布式缓存是一种将数据存储在多个节点上的缓存系统,它通过在内存中存储常用数据,减少对后端数据库的访问,从而提高应用性能和可扩展性。 1.…...
开发者技能图谱:如何利用GitHub仓库系统化规划技术学习路径
1. 项目概述:一个面向开发者的技能图谱与学习路径仓库最近在GitHub上闲逛,发现了一个挺有意思的仓库,叫tayyabexe/skills。乍一看名字,你可能会觉得这又是一个“Awesome-XXX”式的资源列表合集。但点进去仔细研究后,我…...
基于本地AI的语音转文字工具OpenWhisp:隐私优先的离线生产力方案
1. 项目概述:一个完全本地的语音转文字工具 作为一个长期在效率工具和本地AI应用领域折腾的开发者,我一直在寻找一个能让我彻底摆脱网络延迟和隐私顾虑的语音输入方案。市面上的云服务要么有订阅费,要么有数据上传的隐忧,直到我看…...
Model2Vec最佳实践:10个技巧让你的嵌入模型又快又好
Model2Vec最佳实践:10个技巧让你的嵌入模型又快又好 【免费下载链接】model2vec Fast State-of-the-Art Static Embeddings 项目地址: https://gitcode.com/gh_mirrors/mo/model2vec Model2Vec是一个革命性的静态嵌入模型技术,它能将任何句子转换…...
OpenClaw 2.6.4 一键部署教程|零代码零基础无需命令快速上手
OpenClaw 是一款可以在本地运行的智能操作工具,能够通过自然语言指令完成电脑自动化操作,无需复杂配置即可快速使用。本文为 Windows 10/11 64 位系统提供完整的一键部署流程,帮助用户快速搭建属于自己的本地智能工具。 适配系统:…...
Chlorophyll印相稀缺资源包泄露!含19世纪银盐配方数字化映射表、327张原生植物扫描底片及MJ v6.2专用--style raw参数集(限今日领取)
更多请点击: https://intelliparadigm.com 第一章:Chlorophyll印相的技术起源与美学范式 Chlorophyll印相(叶绿素印相)并非传统摄影术的延伸,而是一种融合植物生物化学、光敏反应与数字图像处理的跨媒介实践。其技术雏…...
LangGraph、OpenClaw、Hermes:三种 Agent 路线,不是一回事
开头 这两年,只要聊到 Agent,绕不开三个名字:LangGraph、OpenClaw、Hermes。 它们都很火。 但也很容易被混在一起。 有人把 LangGraph 当成一个“Agent 产品”。 有人把 OpenClaw 当成一个“Agent 框架”。 也有人把 Hermes 理解成“另…...
信息安全工程师-主动防御体系核心技术:从监测溯源到隐私保护全解析
一、引言(一)技术定义与软考定位主动防御是相对于被动防御的安全理念,核心是通过主动诱捕、溯源标记、容忍恢复等技术,突破传统 “边界防护 事后补救” 的局限,实现攻击全生命周期的管控。本文涉及的数字水印、网络攻…...
终极指南:如何用WarcraftHelper彻底解决魔兽争霸3的现代系统兼容性问题
终极指南:如何用WarcraftHelper彻底解决魔兽争霸3的现代系统兼容性问题 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 你是否还在为魔兽争…...
