iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >Redis中什么是Big Key(大key)问题?如何解决Big Key问题?
  • 953
分享到

Redis中什么是Big Key(大key)问题?如何解决Big Key问题?

redis big keysredis大key问题redis大key优化 2023-03-15 11:03:58 953人浏览 八月长安
摘要

目录一、什么是Big Key?二、Big Key产生的场景?三、Big Key的危害?四、如何识别Big Key?五、如何解决Big Key问题?补充知识:key设计总结一、什么是B

一、什么是Big Key?

通俗易懂的讲,Big Key就是某个key对应的value很大,占用的redis空间很大,本质上是大value问题。key往往是程序可以自行设置的,value往往不受程序控制,因此可能导致value很大。

Redis中这些Big Key对应的value值很大,在序列化/反序列化过程中花费的时间很大,因此当我们操作Big Key时,通常比较耗时,这就可能导致redis发生阻塞,从而降低redis性能。

用几个实际的例子对大Key的特征进行描述:

● 一个String类型的Key,它的值为5MB(数据过大);

● 一个List类型的Key,它的列表数量为20000个(列表数量过多);

● 一个ZSet类型的Key,它的成员数量为10000个(成员数量过多);

● 一个Hash格式的Key,它的成员数量虽然只有1000个但这些成员的value总大小为100MB(成员体积过大);

在实际业务中,大Key的判定仍然需要根据Redis的实际使用场景、业务场景来进行综合判断。通常都会以数据大小与成员数量来判定。

二、Big Key产生的场景?

1、redis数据结构使用不恰当

将Redis用在并不适合其能力的场景,造成Key的value过大,如使用String类型的Key存放大体积二进制文件型数据。

2、未及时清理垃圾数据

没有对无效数据进行定期清理,造成如HASH类型Key中的成员持续不断的增加。即一直往value塞数据,却没有删除机制,value只会越来越大。

3、对业务预估不准确

业务上线前规划设计考虑不足没有对Key中的成员进行合理的拆分,造成个别Key中的成员数量过多。

4、明星、网红的粉丝列表、某条热点新闻的评论列表

假设我们使用List数据结构保存某个明星/网红的粉丝,或者保存热点新闻的评论列表,因为粉丝数量巨大,热点新闻因为点击率、评论数会很多,这样List集合中存放的元素就会很多,可能导致value过大,进而产生Big Key问题。

三、Big Key的危害?

1、阻塞请求

Big Key对应的value较大,我们对其进行读写的时候,需要耗费较长的时间,这样就可能阻塞后续的请求处理。Redis的核心线程是单线程,单线程中请求任务的处理是串行的,前面的任务完不成,后面的任务就处理不了。

2、内存增大

读取Big Key耗费的内存比正常Key会有所增大,如果不断变大,可能会引发OOM(内存溢出),或达到redis的最大内存maxmemory设置值引发写阻塞或重要Key被逐出。

3、阻塞网络

读取单value较大时会占用服务器网卡较多带宽,自身变慢的同时可能会影响该服务器上的其他Redis实例或者应用。

4、影响主从同步、主从切换

删除一个大Key造成主库较长时间的阻塞并引发同步中断或主从切换。

四、如何识别Big Key?

1、使用redis自带的命令识别

例如可以使用Redis官方客户端redis-cli加上--bigkeys参数,可以找到某个实例5种数据类型(String、hash、list、set、zset)的最大key。
    优点是可以在线扫描,不阻塞服务;缺点是信息较少,内容不够精确。

2、使用debug object key命令

根据传入的对象(Key的名称)来对Key进行分析并返回大量数据,其中serializedlength的值为该Key的序列化长度,需要注意的是,Key的序列化长度并不等同于它在内存空间中的真实长度,此外,debug object属于调试命令,运行代价较大,并且在其运行时,进入Redis的其余请求将会被阻塞直到其执行完毕。并且每次只能查找单个key的信息,官方不推荐使用。

3、redis-rdb-tools开源工具

这种方式是在redis实例上执行bgsave,bgsave会触发redis的快照备份,生成rdb持久化文件,然后对dump出来的rdb文件进行分析,找到其中的大key。

GitHub地址:https://github.com/sripathikrishnan/redis-rdb-tools

优点在于获取的key信息详细、可选参数多、支持定制化需求,结果信息可选择JSON或csv格式,后续处理方便,其缺点是需要离线操作,获取结果时间较长。

五、如何解决Big Key问题?

要解决Big Key问题,无非就是减小key对应的value值的大小,也就是对于String数据结构的话,减少存储的字符串的长度;对于List、Hash、Set、ZSet数据结构则是减少集合中元素的个数。

1、对大Key进行拆分

将一个Big Key拆分为多个key-value这样的小Key,并确保每个key的成员数量或者大小在合理范围内,然后再进行存储,通过get不同的key或者使用mget批量获取。

2、对大Key进行清理

对Redis中的大Key进行清理,从Redis中删除此类数据。Redis自4.0起提供了UNLINK命令,该命令能够以非阻塞的方式缓慢逐步的清理传入的Key,通过UNLINK,你可以安全的删除大Key甚至特大Key。

3、监控Redis的内存、网络带宽、超时等指标

通过监控系统并设置合理的Redis内存报警阈值来提醒我们此时可能有大Key正在产生,如:Redis内存使用率超过70%,Redis内存1小时内增长率超过20%等。

4、定期清理失效数据

如果某个Key有业务不断以增量方式写入大量的数据,并且忽略了其时效性,这样会导致大量的失效数据堆积。可以通过定时任务的方式,对失效数据进行清理。

5、压缩value

使用序列化、压缩算法将key的大小控制在合理范围内,但是需要注意序列化、反序列化都会带来一定的消耗。如果压缩后,value还是很大,那么可以进一步对key进行拆分。

补充知识:key设计

(1)【建议】: 可读性和可管理性

以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如业务名:表名:id
o2o:order:1

(2)【建议】:简洁性

保证语义的前提下,控制key的长度,当key较多时,内存占用也不容忽视,例如:
user:{uid}:friends:messages:{mid} 简化为 u:{uid}??m:{mid}

(3)【强制】:不要包含特殊字符

反例:包含空格、换行、单双引号以及其他转义字符

总结

到此这篇关于Redis中什么是Big Key(大key)问题的文章就介绍到这了,更多相关Redis Big Key问题解决内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Redis中什么是Big Key(大key)问题?如何解决Big Key问题?

本文链接: http://www.lsjlt.com/news/199903.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Redis中什么是Big Key(大key)问题?如何解决Big Key问题?
    目录一、什么是Big Key二、Big Key产生的场景?三、Big Key的危害?四、如何识别Big Key?五、如何解决Big Key问题?补充知识:key设计总结一、什么是Bi...
    99+
    2023-03-15
    redis big keys redis大key问题 redis大key优化
  • Redis中什么是Big Key(大key)问题?如何解决Big Key问题?
    目录一、什么是Big Key二、Big Key产生的场景?三、Big Key的危害?四、如何识别Big Key?五、如何解决Big Key问题?补充知识:key设计总结一、什么是Big Key 通俗易懂的讲,Big Ke...
    99+
    2023-03-15
    redis big keys redis大key问题 redis大key优化
  • Redis中怎么解决Big Key问题
    这篇文章主要介绍“Redis中怎么解决Big Key问题”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Redis中怎么解决Big Key问题”文章能帮助大家解决问题。一、什么是B...
    99+
    2023-07-05
  • Redis什么是热Key问题以及如何解决热Key问题
    目录一、什么是热Key?二、热Key产生的原因?三、热点Key的危害?四、如何识别热点Key?五、如何解决热Key问题?一、什么是热Key? 在Redis中,我们把访问频率高的Key,称为热Key。 比如突然又几十万的请...
    99+
    2022-11-18
    Redis热Key 解决热Key问题 Redis什么是热Key
  • redis中热key问题的解决方法
    这篇文章主要介绍了redis中热key问题的解决方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。正文热Key问题上面提到,所谓热key问题...
    99+
    2024-04-02
  • Redis中热点key存储问题怎么解决
    今天小编给大家分享一下Redis中热点key存储问题怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一...
    99+
    2024-04-02
  • java8toMap问题(key重复如何解决)
    目录java8 toMap(key重复解决)Collectors.toMap的key重复解决方案一解决方案二java8 toMap(key重复解决) 使用stream的toMap()...
    99+
    2024-04-02
  • Host key verification failed 问题解决
    ​ 一、发现问题: 出现问题的截图: ​ 出现问题的原因:         环境经过重装后,系统重置;相当于首次访问当前环境。A通过ssh登陆(scp的传输第一步就是进行ssh的登录动作,然后再基于ssh协议进行文件的传输,传输过程加密。s...
    99+
    2023-09-09
    服务器 linux 运维
  • 解决redis批量删除key值的问题
    目录遇到的问题:解决办法:原理解析:补充知识:遇到的问题: 在开发过程中,会遇到要批量删除某种规则的key,例如login_logID(ID为变量),现在需要删除"logi...
    99+
    2024-04-02
  • redis批量删除key值的问题怎么解决
    这篇文章主要讲解了“redis批量删除key值的问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“redis批量删除key值的问题怎么解决”吧!遇到的问题:在开发过程中,会遇到要批量...
    99+
    2023-06-29
  • Redis热点 Key 问题发现与5种解决方案是什么
    本篇文章给大家分享的是有关Redis热点 Key 问题发现与5种解决方案是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。热点问题产生的原因...
    99+
    2024-04-02
  • Redis中怎么应对缓存热key问题
    这篇“Redis中怎么应对缓存热key问题”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“R...
    99+
    2024-04-02
  • 解决问题:java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowe
    解决问题:java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowe 这段代码是一个 Java 异常错误信息,其中包含了以下关键信息: 错误...
    99+
    2023-08-16
    java mysql 开发语言
  • Redis中key过期如何解决
    这篇文章给大家介绍Redis中key过期如何解决,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。初步调查受影响的团队和缓存团队开始进行初步的调查。我们发现延迟增加与现在正在发生的key清...
    99+
    2024-04-02
  • 解决com.android.ide.common.signing.KeytoolException: Failed to read key AndroidDebugKey from store问题
    背景 最近跑一个app, Android Studio版本有点低,就升级重装了下, 结果报错 com.android.ide.common.signing.KeytoolException: Failed to read key Andro...
    99+
    2023-08-30
    android android studio android-studio apk ide
  • no matching host key type found. Their offer: ssh-rsa 问题解决
    最近升级了Mac OS Ventura 13.0.1后发现ssh指定密钥登录服务器失败。 no matching host key type found. Their offer: ssh-rsa 进入当前用户的.ssh目录发现比之前系统多...
    99+
    2023-09-03
    ssh 服务器 linux
  • 基于java HashMap插入重复Key值问题怎么解决
    这篇“基于java HashMap插入重复Key值问题怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“基于j...
    99+
    2023-07-05
  • 如何处理json中不带双引号的key的问题
    目录处理json中不带双引号key问题如下面数据结果报错怎么解决呢?json数据key值有引号与没引号的取值有的json数据的键值是没有引号的有的返回值的键值是由引号的第一种json...
    99+
    2024-04-02
  • 关于JSON解析中获取不存在的key问题
    目录1 . fastjson2 . net.sf.json3 . org.json1 . fastjson 在fastjson中有些getXXX方法 , 如getString , g...
    99+
    2024-04-02
  • python中hash操作的key是否存在的判断问题.
    本篇文章为大家展示了python中hash操作的key是否存在的判断问题.,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 >>> c="abcdeabccqq&...
    99+
    2023-06-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作