redis计算指定key大小

一文带你了解Redis中的大key、热key 在 Redis 中,大Key 和 热Key 都可能引发性能问题,影响系统的稳定性和响应速度。为了优化 Redis 的使用,减少大Key和热Key带来的负面影响,我们可以采取一些技术手段和设计模式来解决这两个问题。下面是针对 大Key 和 热Key 的具体解决方案 阅读详情

memory usage 

redis4 及已上版本

> SET "" ""OK> MEMORY USAGE ""(integer) 51

memory usage 命令返回key和value占用内存的bytes

--stat

持续输出stats模式,在测试上可以做测试

> redis-cli -a password  -p 6379 -h hostname --stat------- data ------ --------------------- load -------------------- - child -keys       mem      clients blocked requests            connections          35768376   6.98G    2021    0       2600414876 (+3)     3121642     35768376   6.98G    2021    0       2600414879 (+3)     3121642     35768376   6.98G    2021    0       2600414884 (+5)     3121642     35768376   6.98G    2021    0       2600414887 (+3)     3121642     35768376   6.98G    2021    0       2600414890 (+3)     3121642     35768376   6.98G    2021    0       2600414894 (+4)     3121642     35768376   6.98G    2021    0       2600414898 (+4)     3121642     35768376   6.98G    2021    0       2600414901 (+3)     3121642     35768376   6.98G    2021    0       2600414905 (+4)     3121642     35768376   6.98G    2021    0       2600414909 (+4)     3121642     35768376   6.98G    2021    0       2600414912 (+3)     3121642

通过第三方工具rdbtools来计算key大小


安装pip

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py# 用相对应版本python安装对应版本sudo python get-pip.pysudo python3 get-pip.py

安装rdbtools

pip install rdbtools

查看指定key大小

 redis-memory-for-key -s hostname [-a password]  -p 6379 -d 0 key1

rdb

# rdb --help
usage: usage: rdb [options] /path/to/dump.rdb
Example : rdb --command json -k "user.*" /var/redis/6379/dump.rdb
positional arguments:
  dump_file             RDB Dump file to process
optional arguments:
  -h, --help            show this help message and exit
  -c CMD, --command CMD
                        Command to execute. Valid commands are json, diff,
                        justkeys, justkeyvals, memory and protocol
  -f FILE, --file FILE  Output file
  -n DBS, --db DBS      Database Number. Multiple databases can be provided.
                        If not specified, all databases will be included.
  -k KEYS, --key KEYS   Keys to export. This can be a regular expression
  -o NOT_KEYS, --not-key NOT_KEYS
                        Keys Not to export. This can be a regular expression
  -t TYPES, --type TYPES
                        Data types to include. Possible values are string,
                        hash, set, sortedset, list. Multiple typees can be
                        provided. If not specified, all data types will be
                        returned
  -b BYTES, --bytes BYTES
                        Limit memory output to keys greater to or equal to
                        this value (in bytes)
  -l LARGEST, --largest LARGEST
                        Limit memory output to only the top N keys (by size)
  -e {raw,print,utf8,base64}, --escape {raw,print,utf8,base64}
                        Escape strings to encoding: raw (default), print,
                        utf8, or base64.
  -x, --no-expire       With protocol command, remove expiry from all keys
  -a N, --amend-expire N
                        With protocol command, add N seconds to key expiry
                        time
rdb -c memory /tmp/dump.rdb 
database,type,key,size_in_bytes,encoding,num_elements,len_largest_element,expiry
0,hash,data:index_flow_yingshi,10492,hashtable,1,8992,2019-01-14T08:20:10.236000
0,hash,data:index_movie,22068,hashtable,7,2896,2019-01-14T07:29:19.685000
0,string,block:index_module_novel,8296,string,7694,7694,2019-01-13T00:27:46.128000
0,string,block:index_bottom_baike_aikan,8296,string,7632,7632,2019-01-14T02:27:11.850000
0,string,block:index_bottom_tools,5224,string,4549,4549,2019-01-13T01:02:09.171000
0,string,block:index_module_travel,7272,string,6408,6408,2019-01-13T00:43:39.478000
...

输出了db,数据类型,key, 大小, 编码等多列信息

在这种特殊的模式下,redis-cli会对key进行空间分析,扫描出占用空间大的key的集,并且提供关于数据类型和数组组成构造

只要知道最大的N个key, 可以使用-l选项

[@sjs_73_171 ~]$ rdb -c memory -l 3 /tmp/dump.rdb  
database,type,key,size_in_bytes,encoding,num_elements,len_largest_element,expiry
0,hash,city_tong,724236,hashtable,3113,216,2019-01-14T01:10:59.407000
0,hash,iplocsearch,406292,hashtable,383,180190,2019-01-30T05:37:56.082000
0,hash,weather_tong3,583844,hashtable,319,1658,2019-01-07T10:22:33.742000

redis-cli --bigkeys

redis-cli -a password -p 6379 -h hostname --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 string found so far '100000004602269' with 156 bytes[00.00%] Biggest string found so far '100000006251981' with 225 bytes[00.00%] Biggest string found so far '100000011594328' with 226 bytes[00.00%] Biggest string found so far '100000000095649' with 227 bytes[00.01%] Biggest string found so far '100000003257493' with 228 bytes...

debug object key

redis的命令,可以查看某个key序列化后的长度。 例:

连接上redis后执行如下命令

b.redis:1959> hmset myhash k1 v1 k2 v2 k3 v3
OK
b.redis:1959> debug object myhash
Value at:0x7f005c6920a0 refcount:1 encoding:ziplist serializedlength:36 lru:3341677 lru_seconds_idle:2

Value at:key的内存地址
refcount:引用次数
encoding:编码类型
serializedlength:序列化长度
lru_seconds_idle:空闲时间 

几个需要注意的问题 serializedlength是key序列化后的长度(redis在将key保存为rdb文件时使用了该算法),并不是key在内存中的真正长度。这就像一个数组在json_encode后的长度与其在内存中的真正长度并不相同。不过,它侧面反应了一个key的长度,可以用于比较两个key的大小。 serializedlength会对字串做一些可能的压缩。如果有些字串的压缩比特别高,那么在比较时会出现问题。比如下列:

b.redis:1959> set str1 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
OK
b.redis:1959> set str2 abcdefghijklmnopqrstuvwxyz1234
OK
b.redis:1959> debug object str1
Value at:0x7f007c035b80 refcount:1 encoding:embstr serializedlength:12 lru:3342615 lru_seconds_idle:13
b.redis:1959> debug object str2
Value at:0x7f00654df400 refcount:1 encoding:embstr serializedlength:31 lru:3342622 lru_seconds_idle:7

两个字串的实际长度都是30, 但str1的serializedlength为12, str2的为31。

redis的key是如何找到对应存储的数据原理 Redis 通过哈希表实现高效的键值对存储和查找。其核心步骤包括:计算 Key 的哈希值。定位哈希槽。遍历链表,找到匹配的键值对。为了提高性能,Redis 使用了渐进式 Rehash 和链地址法等优化技术。合理设计 Key 可以进一步提升 Redis 的性能和可维护性。 阅读详情

相关推荐

Redis 内存爆了?使用 Python 分析一下哪些 Key 占用空间比较大

Redis是一种高性能的键值存储系统,常用于缓存、数据存储和消息队列等场景。然而,随着Redis中存储的键值对数量增多,我们可能需要了解哪些键占用了较大的内存空间。这对于优化内存使用、识别资源瓶颈以及进行容量规划非常重要。本文将介绍如何使用Python来分析Redis中哪些键占用了较大的空间。我们将探讨如何连接Redis数据库,并使用Redis库获取键的占用大小信息。最后,我们将输出结果拷贝到Excel中对数据进一步分析。

水滴的博客 4161

分析redis key大小的几种方法

本文系转载,便于整理和归档。原文地址 https://cloud.tencent.com/developer/article/1757281 当redis被用作缓存时,有时我们希望了解key的大小分布,或者想知道哪些key占的空间比较大。本文提供了几种方法。 一. bigKeys 这是redis-cli自带的一个命令。对整个redis进行扫描,寻找较大的key。例: redis-cli -h b.redis -p 1959 --bigkeys 输出: # Scanning the entire key.

wejack的专栏 2295

OpenHarmony实战开发-如何实现文件分布式同步编辑

在分布式文件场景中,分布式设备管理包含了分布式设备搜索、分布式设备列表弹窗、远端设备拉起三部分。首先在分布式组网内搜索设备,然后把设备展示到分布式设备列表弹窗中,最后根据用户的选择拉起远端设备。两台设备组网的分布式场景是工作中常常需要的。这样的分布式场景有助于加快工作效率,减少工作中的冗余,本例将为大家介绍如何实现上述功能。​ (2)订阅分布式数据变化:通过this.distributedObject.on(‘status’, this.statusCallback)监听分布式数据对象的变更。

2401_82546228的博客 751

redis-计算每个大key

一、安装工具 pip install rdbtools 二、copy份线上dump.rdb 三、开始分析 rdb -c memory -l 20 redis6379_database.rdb 四、参数解释 usage: usage: rdb [options] /path/to/dump.rdb Example : rdb --command json -k "user.*" /var/redis/6379/dump.rdb positional arguments: dump_...

line_on_database的博客 1107

避开这些坑,你的Python爬虫才能稳定爬取IEEE Xplore(含反爬策略与MongoDB存储实战)

本文详细介绍了如何构建稳定的Python爬虫系统以爬取IEEE Xplore学术论文,包括反爬策略、MongoDB存储优化和断点续传机制。通过动态等待时间算法、请求头指纹管理和会话保持策略,有效应对IEEE的反爬机制。同时,优化MongoDB数据结构和索引,提升存储效率。最后,强调法律合规与伦理考量,确保爬虫合法合规运行。

weixin_29031057的博客 1095

SAP公司间外协业务流程以及配置说明

SAP公司间外协业务流程以及配置说明

竹大的博客 7167

redis查看某一个key的大小_分析redis key大小的几种方法

当redis被用作缓存时,有时我们希望了解key的大小分布,或者想知道哪些key占的空间比较大。本文提供了几种方法。一. bigKeys这是redis-cli自带的一个命令。对整个redis进行扫描,寻找较大的key。例:redis-cli -h b.redis -p 1959 --bigkeys1输出:# Scanning the entire keyspace to find biggest ...

weixin_35478664的博客 5658

rk3568 rk628桥片hdmi转lvds

RK628 是瑞芯微全新推出的视频桥接芯片,支持丰富的显示接口,支持高分辨率大屏产品转换需求。基于DRM、FB的显示框架易于使用。 输入信号支持:HDMI、RGB、BT.1120,输出信号支持 HDMI、GVI、Dual LVDS、Dual MIPI、MIPI-CSI、RGB、BT.1120,最高支持4K 60fps 输入/输出转换,并且支持输入到输出 1/4~4倍的缩放。

weixin_35723192的博客 1131

[015]Redis | 内存大小单位转换

1k => 1000 bytes 1kb => 1024 bytes 1m => 1000000 bytes 1mb => 1024*1024 bytes 1g => 1000000000 bytes 1gb => 1024*1024*1024 bytes 注意: 对于大小敏感:1GB1Gb1gB一样!!! 上面代码来自于《Github-Redis》 ...

GC怪兽的Blog 648

YOLOv11改进策略【Head】| AFPN渐进式自适应特征金字塔,增加针对小目标的检测头(附模块详解和完整配置步骤)

一、本文介绍 本文利用AFPN对YOLOv11的网络模型进行优化提升。AFPN采用渐近式融合及自适应空间融合操作。通过渐近式架构,逐步整合不同层级特征,有效避免非相邻层级间因语义差距过大导致的信息丢失或降级问题,确保在多尺度特征融合过程中既能保留高层语义信息,又能融入低层细节特征。本文将AFPN应用于YOLOv11中,并配置了针对小目标的检测头,能显著增强模型对不同尺度目标的检测能力,使其在复杂场景下更聚焦于目标物体特征,减少背景等无关信息的影响。 专栏目录:YOLOv11改进目录一览 | 涉及卷积层、

Limiiiing的博客 2718

linux内核协议栈 TCP选项之SACK选项概述

目录 1SACK概述 1.1 SACK允许选项 1.2 SACK选项 2SACK允许选项的发送 2.1 SYN段发送 2.2 接收SYN段 2.2.1 struct tcp_options_received 2.2.2 tcp_parse_options() 2.3 发送SYN+ACK段 3D-SACK 1SACK概述 标准的TCP确认机制中,如果发送方发送了0-1000序号之间的数据,接收方收到了0-100、300-1000,那么接收方只能向发送方确认101,这时发送方会重...

2731

Redis入门完整教程:处理bigkey

bigkey是指key对应的value所占的内存空间比较大,例如一个字符串类 型的value可以最大存到512MB,一个列表类型的value最多可以存储232-1个 元素。如果按照数据结构来细分的话,一般分为字符串类型bigkey和非字符 串类型bigkey。 ·字符串类型:体现在单个value值很大,一般认为超过10KB就是 bigkey,但这个值和具体的OPS相关。 ·非字符串类型:哈希、列表、集合、有序集合,体现在元素个数过 多。 bigkey无论是空间复杂度和时间复杂度都不太友好,下面我们将介绍它

Lee达森的博客 996

开源项目evo2安装教程

Evo 2 是一种先进的 DNA 语言模型,用于长上下文建模和设计。Evo 2 使用 StripedHyena 2 架构在单核苷酸分辨率下对 DNA 序列进行建模,上下文长度可达 100 万碱基对。Evo 2 使用 Savanna 进行预训练,并在 OpenGenome2 数据集上进行自回归训练,该数据集包含来自所有生命领域的 8.8 万亿个标记。

猿小白的博客 927

Sring Redis实现分页查询key keytemplate列表

Sring Redis实现分页查询key keytemplate(模板)列表

连自己心爱的人都留不住,Java学的再好又有什么用。 1535

Hermes Agent 对阵 OpenClaw:自我改进的 AI 队友

但在 2026 年 2 月,Nous Research 发布了 Hermes Agent,它带来了不同的愿景:一个不仅能够运行,还能学习的代理。在完成复杂的多步骤任务后,它会分析自己的操作并创建一个可复用的技能。对于已在使用 OpenClaw 的澳大利亚企业而言,这意味着您可以试用 Hermes Agent,而无需丢失数月的配置和自定义成果。最重要的区别在于理念:OpenClaw 是一个需要配置的工具,而 Hermes Agent 则是一个会学习的队友。OpenClaw 的技能是静态的。

xiaoshun007的专栏 1571

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Redis Key 的数量上限及优化策略:从理论到实践

Redis 的哈希表使用 无符号 32 位整数 存储键值对的数量,因此理论上最多可以存储2^32个 Key。但在实际生产环境中,内存限制 和 性能因素 会使得 Key 数量远低于此值。

私聊前往站内信:https://i.youkuaiyun.com/#/msg/chat/weixin_44976692 8056

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Redis大key 问题

Redis大key 问题 背景 双十一大促期间, 收到客服反馈通知,说 APP 领券接口缓慢。找到一个case,通过调用链路发现,是操作redis 缓慢,并且还搜到一些redis 异常。 最后定位到原因:是发券场景下拿redis 做了一个缓存券批次的操作,记录用户当天领取的所有券批次 发券场景: key = userId, value = 券批次ID 列表, 而redis 查询发现多了许多大key,体现在 一个用户领取的几千甚至上万张优惠券,导致Redis 查询缓慢,甚至异常。至于为何有的用户会领取这么多优

只有变秃 才能变强 1万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Redis大Key优化

Redis 大key Redis使用过程中经常会有各种大key的情况, 比如: 单个简单的key存储的value很大 hash, set,zset,list 中存储过多的元素(以万为单位) 由于redis是单线程运行的,如果一次操作的value很大会对整个redis的响应时间造成负面影响,所以,业务上能拆则拆,下面举几个典型的分拆方案。 业务场景: 即通过hash的方式来存储每一天用户订单次数...

稻草人技术博客 9234

Redis如何解决大Key问题

### **1. 什么是大 Key?** **大 Key(Big Key)** 指的是 **单个 Key 的数据量特别大**,通常体现在: - **单个 String 类型的 Key** 存储了超长的内容(如超大 JSON、Base64 图片)。 - **单个 List/Set/Zset/Hash 存储大量元素**,导致: - **查询效率下降**(一次查询数据过多)。 - **删除或过期开销大**(删除一个 Key 可能会卡 Redis)。 - **主从复制或数据持久化时阻塞 Redis**(

人心有反复,好在山水有重逢。 1838

Redis大key多key拆分方案

使用bitmap或布隆过滤器的场景,往往是数据量极大的情况,在这种情况下,Bitmap和布隆过滤器使用空间也比较大,比如用于公司userid匹配的布隆过滤器,就需要512MB的大小,这对redis来说是绝对的大value了。​ 一:key 本身就有很强的相关性,比如多个key 代表一个对象,每个key是对象的一个属性,这种可直接按照特定对象的特征来设置一个新Key——Hash结构, 原先的key则作为这个新Hash 的field。这样算出三个key 的桶分别是 1 , 2, 2。

LoveSummer 2万+

redis key 不存在删除key_Redis 键(key)命令

基础命令对于Redis的key命令,我们来了解一下常用的几个命令,我们平时使用频率比较高的几个命令。Del这个命令其实很简单啦,就是删除指定的key。其命令也很简单,为:Del key1 ... keyN。返回值为删除的key的数量。Exists这个命令和Del命令一样简单,就是检查指定的key是否存在。其命令同样简单,为:Exsits key1 ... keyN。返回值为存在的key的数量。这里...

weixin_39672979的博客 3773

Redis的热点key怎么解决

在Redis中,热键问题是指那些经常被访问的键,它们会消耗大量的Redis服务器资源,当大量的请求集中在一个key上,会导致这个节点的cpu,内存等资源被大量占用,影响着redis集群的性能和稳定性。内存压力:热键通常是被频繁访问的数据,如果这些数据量很大,可能会导致 Redis 内存占用过高,造成内存压力。当 Redis 内存使用超过物理内存限制时,可能会触发内存淘汰策略,导致热键数据被驱逐,影响系统性能。性能瓶颈:由于热键集中在少数几个节点上,可能会导致请求在这些节点上竞争,造成性能瓶颈。

m0_62105753的博客 1178

Redis篇--常见问题篇4--大Key(Big Key,什么是大Key,影响及使用建议)

大Key:通常是指值(Value)的长度非常大,实际上键(Key)长度很大也算。通常来说,键本身不会很长,占用的内存较少,因此判断一个键是否为bigKey主要看它对应的值的大小。(1)、键(Key)非常大(2)、值(Value)非常大大Key的定义:Redis中的"大 Key"既可以指键(Key)非常大,也可以指值(Value)非常大。无论是键还是值,过大的大小都会对Redis的性能和内存使用产生负面影响。

weisian的博客 3万+

Redis的大key怎么解决

简单来说,如果一个 key 对应的 value 所占用的内存比较大,那这个 key 就可以看作是 bigkey。具体多大才算大呢?有一个不是特别精确的参考标准:

m0_62105753的博客 1209

Redis 查看value大小

线上会经常遇到大key问题,这时候就需要通过–bigkeys来找出最大的key,但是往往和最大的key前缀相同的一类key都会比较大,所以打算一次性获取此类key中比较大的key,官方文档中查看获取value大小的时间成本较高,于是查看有关bigkeys分析这块的redis源码来获取查询命令 代码文件:redis-cli.c 入库函数:findBigKeys 中的主要逻辑 定义了不同数据类型对应的value大小单位 char *typename[] = {"string","list","set",.

weixin_41431016的博客 2294
上一篇: rust编程错误集(updating)
下一篇: vim第3方插件管理(updating)
大怀特
博客等级 码龄6年 5787粉丝 133原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大怀特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值