Redis中的大key解决策略
admin
2024-03-24 23:36:45
0

大key的定义

首先大key不是key很大而是key对应的value值很大
一般而言如果String类型值大于10KB,Hash,Set,Zset,List类型的元素的个数大于5000个都可以称之为大key

大key的危害

  • 客户端超时等待:由于Redis执行命令是单线程处理,然后在操作大key时会比较耗时,那么就会阻塞Redis,从客户端这一视角来看就是很久很久都没有响应
  • 引发网络阻塞:每次获取大key产生的流量较大,如果一个key的大小是1MB,每秒访问量为1000,那么每秒会产生1000MB的流量这对于普通千兆网卡是灾难的
  • 阻塞工作线程:如果使用del删除大key,会阻塞工作线程这样就没有办法处理后续的命令
  • 内存分布不均匀:集群模型在slot分片均匀的情况下,会出现数据和查询倾斜情况,部分有大key的Redis节点占用内存多,QPS比较大

定位大key

redi-cli --bigkeys

使用时注意事项

最好在从节点上执行该命令或者在Redis实例业务压力的低峰阶段进行扫描查询,因为key很多时会很慢

不足之处

  • 这个方法只能返回每种类型中最大的那个bigkey,无法得到大小排到前N位的bigkey
  • 对于集合类型来说,这个方法只统计集合元素的多少,而不是实际占用的内存量。因为一个集合中元素个数多,并不一定占用内存就多

使用SCAN命令查找大key

使用SCAN命令对数据库进行扫描。然后用TYPE命令获取返回的每一个key的类型

对于String类型,可以直接使用STRLEN命令获取字符串长度,也就是占用的内存空间字节数

对于集合类型来说可以使用MEMORY USAGE命令,查询有关键值对占用的内存空间

使用RdbTools

使用第三方开源工具,可以解析Redis快照,找到其中的大key

删除大key

分批次删除

使用SCAN扫描key,比如删除Hash,先取100字段删除删除再取

异步删除

在Redis4.0版本开始,可以采用异步删除法用unlink命令代替del删除

这样Redis会将这个key放入到一个异步线程中进行删除,这样不会阻塞主线程

被动删除

前面两种都是主动删除,这一种是通过配置参数,当认为需要删除的时候就删除了

  • lazyfree-lazy-eviction:表示当 Redis 运行内存超过 maxmeory 时,是否开启 lazy free 机制删除;
  • lazyfree-lazy-expire:表示设置了过期时间的键值,当过期之后是否开启 lazy free 机制删除;
  • lazyfree-lazy-server-del:有些指令在处理已存在的键时,会带有一个隐式的 del 键的操作,比如 rename 命令,当目标键已存在,Redis 会先删除目标键,如果这些目标键是一个 big key,就会造成阻塞删除的问题,此配置表示在这种场景中是否开启 lazy free 机制删除;
  • slave-lazy-flush:针对 slave (从节点) 进行全量数据同步,slave 在加载 master 的 RDB 文件前,会运行 flushall 来清理自己的数据,它表示此时是否开启 lazy free 机制删除。

建议开启其中的 lazyfree-lazy-eviction、lazyfree-lazy-expire、lazyfree-lazy-server-del 等配置,这样就可以有效的提高主线程的执行效率

如何避免大key

  1. 对大key进行拆分

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

  1. 对大key进行清理

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

  1. 监控Redis内存、网络带宽、超时等指标

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

  1. 压缩value

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

相关内容

热门资讯

国民性创新,越来越阳春白雪 问一个问题,最近两年爆火的创新,从生成式AI到人形机器人,到底是离大众越来越近,还是离大众越来越远?...
男子被显示欠银行1000万亿索... 男子被显示欠银行1000万亿索赔200万遭拒,银行仅愿赔偿3万元
研究显示美国散户投资者推动杠杆... 来源:环球市场播报 Direxion公司联合Vanda Research与The Compound ...
高瓴、李录、巴菲特最新持仓披露... 最近,随着美股13F文件的披露,多家私募机构2025Q4最新调仓情况浮出水面。之前的文章,证星研究院...
原创 老... 四十年代的北京珠市口路口,正处于从民国向新中国过渡的时期,它既保留着清末民初形成的鲜明社会分层特征,...
原创 相... 在金融圈,流行一个词叫“估值修复”。意思是股价跌狠了,总会涨回来。 但阿睿发现,自己在相亲市场的估值...
上海楼市重磅新政,非沪籍大松绑... wumiancaijing.com / 最热的泛财经新闻,都在这儿了。 重要提醒!!!为防失联,请“...
春节白酒消费:高端产品热度升高... 来源:新京报 春节是酒水消费传统旺季,马年春节期间,白酒动销稳健复苏。多家机构调研发现,白酒消费呈现...
黄金暴涨的秘密找到了!不是散户... 过去两年,黄金市场最容易被忽视的一条主线,并不是价格本身的起伏,而是一个更为深层的结构性变化——全球...
刘强东投资50亿进军游艇产业,... 极目新闻记者 陈红 刘强东近日创立了独立游艇品牌Sea Expandary,进入游艇产业,计划从研...
韩国驻美大使:密切关注美方新关... 据韩联社报道,韩国驻美国大使康京和2月24日就美国总统特朗普在联邦最高法院裁定“对等关税”违法后宣布...
现货黄金刚刚涨破5200美元关... 25日,现货黄金持续拉涨,盘中再次突破5200美元大关,涨超1.3%。 瑞银(UBS)分析师此前在...
【银行业展望系列】五篇大文章:... 当前银行息差持续承压、规模扩张的增长红利逐渐消退,已经陷入内卷式的同质化竞争。“规模为王”的旧模式将...
原创 一... 美国总统唐纳德·特朗普迅速恢复了之前被最高法院废除的关税政策,这一急转弯让本就面临成本激增压力的美国...
收盘:上证指数、深证成指涨1.... 上证指数(000001)涨0.72%,深证成指(399001)涨1.29%,创业板指(399006)...
蔡宏波、毛健:美国贸易逆差“转... 近年来,美国政府反复将“贸易失衡”描述为事关国家安全的核心问题。从政策实践看,自2018年以来,美国...
五粮液集团入股四川三江汇海融资... 天眼查显示,近日,四川三江汇海融资租赁有限公司发生工商变更,新增四川省宜宾五粮液集团有限公司为股东,...
A股高开高走:周期股延续强势,... A股三大股指2月25日集体高开。早盘震荡走高,午后震荡回落,全天呈现高位震荡走势。 从盘面上看,周期...