Redis大Key问题 - 标准、原因、查找

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 【6月更文挑战第13天】**大Key标准**在不同场景各异,一般string超1MB或容器超10k元素视为大;高并发场景中,string超10KB,容器超5k或整体10MB。**阿里云Redis**中,大Key可能表现为String值5MB,ZSET成员10k,或Hash总值100MB。**大Key影响**包括高读取成本、操作阻塞、存储压力不均。**产生原因**多源于业务设计、动态增长管理和程序错误。**查找大Key**可通过云服务的实时/离线统计,`redis-cli --bigkeys`或使用Redis RDB Tools分析RDB文件。注意,某些特定需求可能需额外工具。

大key的标准

一般的业务场景下,对并发和容量要求都不大:

  • 单个string的value超过1MB

  • 容器数据结构元素数量超过10000

在高并发且低延迟的场景里:

  • 单个string的value超过10KB

  • 容器数据结构元素数量超过5k或是整体value超过10MB

阿里云的云Redis:

  • Key本身的数据量过大:一个String类型的Key,它的值为5 MB。

  • Key中的成员数过多:一个ZSET类型的Key,它的成员数量为10,000个。

  • Key中成员的数据量过大:一个Hash类型的Key,它的成员数量虽然只有2,000个但这些成员的Value(值)总大小为100 MB。

大Key的影响

  1. 读取成本高

    • 时延高,因为执行命令时间更长

    • 消耗更多的带宽,导致自身服务变慢,从而影响相关服务

  2. 大Key相关操作容易阻塞,从而导致无法正常响应

    • 慢查询变多

    • 删除的时候容易导致主库长时间的阻塞,进而可能引发同步中断或主从切换

  3. 占用更多的存储空间,内存达到maxmemory参数定义的上限引发操作阻塞或重要的key被逐出,甚至是OOM

  4. 集群架构下,某个数据分片的内存使用率远超其他数据分片,导致数据分片的内存资源分配不均衡

大key产生的原因

  1. 业务设计不合理:最常见的原因,不经过合理的拆分,就把大json塞在一个key里,甚至塞二进制文件数据。没有对key中的成员进行合理的拆分,造成个别key中的成员数量过多。

  2. 没有处理好value的动态增长问题。如果一直添加value数据的话,没有定期的删除机制、合理的过期机制,或是没有设定合适的阈值,早晚会变成大key。例如:微博明星的粉丝列表、热门评论、直播弹幕

  3. 程序bug:某些异常情况导致某些key的生命周期超出预期,或是value数量异常增长。使用LIST类型key的业务消费侧发生代码故障,造成对应的key的成员只增不减。

如何找到大key

云Redis提供的服务

云服务提供的实时Top Key统计服务或是离线全量Key分析服务

通过redis-cli的bigkeys命令

Redis提供了bigkeys参数能够使redis-cli以遍历的方式分析Redis实例中的所有key,并返回key的整体统计信息与每个数据类型中Top1的大key,bigkeys只能分析并输入六种数据类型(STRING,LIST,HASH,SET,ZSET,STREAM),命令示例

redis-cli -h r-***************.redis.rds.aliyuncs.com -a <password> --bigkeys

注意:若只需要分析STRING类型的大key或是找出成员数量超过10个的HASH Key,则bigkeys参数无法直接实现该类需求。

Redis RDB Tools工具

支持定制化分析的开源工具 GitHub - sripathikrishnan/redis-rdb-tools: Parse Redis dump.rdb files, Analyze Memory, and Export Data to JSON 通过分析RDB文件,扫描出Redis的大key

可以根据自己的精细化需求,全面地分析所有Key的内存占用情况,而且对线上服务无影响。但是因为RDB文件较大时耗时较长。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
1月前
|
缓存 监控 NoSQL
【Redis性能瓶颈揭秘】「调优系列」深入分析热Key的排查策略和解决方案
【Redis性能瓶颈揭秘】「调优系列」深入分析热Key的排查策略和解决方案
215442 12
|
1月前
|
NoSQL 测试技术 Redis
终于把Redis中7千万个Key删完了
终于把Redis中7千万个Key删完了
54 0
|
1月前
|
存储 缓存 NoSQL
【Redis】Redis魔法:揭秘Key的自动消失术——过期删除机制解析
【Redis】Redis魔法:揭秘Key的自动消失术——过期删除机制解析
197 0
|
1月前
|
存储 NoSQL Redis
【Redis】Redis如何实现key的过期删除
【Redis】Redis如何实现key的过期删除
|
1月前
|
NoSQL Java Redis
Spring Boot 监听 Redis Key 失效事件实现定时任务
Spring Boot 监听 Redis Key 失效事件实现定时任务
77 0
|
1天前
|
NoSQL Redis
蓝易云 - redis报错WRONGTYPE Operation against a key holding the wrong kind of value
解决这个问题的方法是检查你的代码,确保你对每个键使用的命令与该键的类型匹配。你可以使用 `TYPE`命令来确定一个键的类型。例如,`TYPE mykey`将返回 `mykey`的类型。
10 3
|
9天前
|
NoSQL Redis 存储
Redis大key问题 - 优化、清理
【6月更文挑战第14天】Redis内置命令如STRLEN、LLEN等用于检测不同类型Key的大小。避免使用DEBUG OBJECT和MEMORY USAGE因高资源消耗。大Key优化包括业务设计避免大Key、数据拆分、更换存储方案、数据压缩和合理清理。清理大Key应选低峰期或分批异步进行,以减少阻塞。使用如HSCAN、SREM等命令避免一次性操作大量数据。
13 1
|
19天前
|
存储 JSON NoSQL
Redis第五弹-HASH结构相关指令和介绍,计数功能Hash-哈希(Redis本来就是键值对结构,哈希,就相当于键值对嵌套了一个键值对)的多种指令Hset key field value-
Redis第五弹-HASH结构相关指令和介绍,计数功能Hash-哈希(Redis本来就是键值对结构,哈希,就相当于键值对嵌套了一个键值对)的多种指令Hset key field value-
|
19天前
|
存储 NoSQL 安全
Redis第六弹-List列表-(相当于数组/顺序表)Lpush key element-一次可以插入多个元素(假如key已经存在,并且key对应的value并非是list,则会报错)
Redis第六弹-List列表-(相当于数组/顺序表)Lpush key element-一次可以插入多个元素(假如key已经存在,并且key对应的value并非是list,则会报错)
|
5天前
|
存储 缓存 运维
Redis的热Key问题
【6月更文挑战第18天】Redis中的热Key是高访问频率的Key,如QPS高、大带宽使用或CPU密集型操作。热Key可能导致CPU占用过高、访问倾斜、缓存击穿和系统性能下降。爆款商品、热点事件等可引发热Key。检测热Key可借助云服务、`redis-cli hotkeys`、业务层监控或`MONITOR`命令。优化策略包括复制热Key到多分片、采用读写分离,但需权衡代码复杂性和数据一致性。
16 0

热门文章

最新文章