首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
孤独的小辣鸡bbq了
门头沟学院 Java
关注
已关注
取消关注
@每天两题神清气爽:
Redis 大 key 要如何处理?
面试官:Redis 大 key 要如何处理?一般来说,下面两种情况被称为大keyString类型的值大于10KBHash、List、Set、ZSet类型的元素个数超过5000个大Key会造成以下问题:客户端超时阻塞:由于Redis执行命令是单线程处理,然后在操作大key时会比较耗时,阻塞其他命令的执行引发网络阻塞:每次获取大key产生的网络流量较大,如果一个key的大小是1MB,每次访问量是1000,那么每秒会产生1000MB的流量,这对普通千兆网卡的服务器是灾难性的阻塞工作线程:如果使用del删除大key时,会阻塞工作线程,这样没法处理后续命令内存分布不均,集群模型在slot分片均匀情况下,会出现数据和查询倾斜情况,部分有大key的Redis节点占用内存多,QPS也会比较大。怎么找到大key呢?通过 redis-cli --bigkeys 命令查找大key:最好在从节点或者业务低峰阶段进行扫描查询,以免影响实例正常运行该方法也存在不足,只能返回每种类型中最大的那个Key,且对于集合类型来说只统计集合元素个数多少而非实际占用的内存。 redis-cli -h 127.0.0.1 -p6379 -a "password" -- bigkeys使用 scan 命令查找大Key使用scan命令对数据库扫描,然后用type命令获取返回的每一个key的类型。对于String类型,可以直接使用strlen命令获取字符串的长度,也就是占用的空间字节数对于集合类型来说,有两种方法可以获得它占用的内存大小:如果能够预先从业务层知道集合元素的平均大小,那么可以使用下面的命令获取集合元素的个数,然后乘以集合元素的平均大小,这样就可获得集合占用的内存大小了。List类型:`LLEN`;Hash 类型:`HLEN` ;Set 类型:`SCARD` ;Set 类型:`SCARD`。如果不能提前知道写入集合元素大小,可以使用 memory usage命令,查询一个键值对占用的内存空间。使用RdbTools工具查找大keyRdbTools第三方开源工具可以用来解析Redis的RDB文件,找到其中的大key。比如下面这条命令,将大于10Kb的Key输出到一个表格文件rdb dump.rdb -c memory --bytes 10240 -f redis.csv如何删除大Key呢?删除操作的本质是要释放键值对占用的内存空间。释放内存后为了更加高效的管理内存空间,操作系统需要把释放掉的内存块插入一个空闲内存块的链表,以便后续进行管理和再分配,这个过程本身需要一定时间,而且会阻塞当前释放内存的应用程序。所以如果一下子释放了大量内存,空闲地址块链表操作时间就会增加,相应的就会造成redis主线程的阻塞。主线程阻塞,其他所有请求都可能会超时,超时越来越多,会造成redis连接耗尽,产生各种异常。因此删除一个大key,要小心。分批次删除。对于删除大Hash,使用hscan命令,每次获取100个字段,再用hdel命令,每次删除1个字段。对于删除大List,通过ltrim命令,每次删除少量元素对于删除大 Set,使用 sscan 命令,每次扫描集合中 100 个元素,再用 srem 命令每次删除一个键。对于删除大 ZSet,使用 zremrangebyrank 命令,每次删除 top 100个元素。异步删除Redis4.0开始,可以采用异步删除法,用unlink命令代替del来删除。这样Redis会将这个key放入到一个异步线层中进程删除,不会阻塞主线程。
点赞 11
评论 4
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
昨天 12:21
门头沟学院 测试工程师
任何经历都是有用的
无论是小厂实习还是大厂实习只要你做了,你行动了就都是经验的积攒,也就都是有用的短期来看,如果你是以结果为导向,比如找工作那可能选大厂会更快速如果你只是想体验不同的岗位,小厂的进入壁垒更低无论是什么公司都是经历,你也不知道这段经历会在哪一天以什么方式帮到你
你认为小厂实习有用吗?
点赞
评论
收藏
分享
07-04 13:52
华北电力大学 Java
兄弟们,祝福我吧!拿下阿里系offer
努力跟积累是有用的啊。想当初投了成百上千个简历连个面试机会都没有的时候都快抑郁了。虽然最后还是拿了两三个外包offer吧。当时就感觉这辈子跟大厂无缘了,可能就是外包外包之间来回跳吧,这辈子一眼看到头的情况。如今没想到拿下了阿里淘天的offer。也有一定的运气成分在吧。我把握住这个机会了。
阿里巴巴开奖98人在聊
点赞
评论
收藏
分享
06-19 22:53
江西应用科技学院 Java
求实习
大三找实习已老实,boss全是未读+已读不回,来个好心人把我捞走吧
积极的小学生不要香菜:
你才沟通多少,没500不要说难
点赞
评论
收藏
分享
07-03 15:03
复旦大学 算法工程师
这是什么层级的耐面王
我真是 从本科一直面到研究生愣是一次字节也没去
Bolee:
一般般吧,看看我的
查看图片
点赞
评论
收藏
分享
07-09 14:02
西安电子科技大学 Java
面试官问:MySQL 为什么不能用 Docker 部署吗?答错直接挂!
💡问题:为什么 MySQL 不推荐用 Docker 部署?Docker 可以轻松地从远程仓库拉取镜像,并快速部署应用,简单高效,极其方便。曾经刚接触Docker的时候,一度以为一切皆可容器化,自己在使用Docker的时候,也是直接Docker部署。但很多企业在实际生产环境中,并不会选择将 MySQL 部署在 Docker 容器中,而是更倾向于直接部署在物理机或虚拟机上。为什么呢?难道企业不知道容器化很方便吗?第一大问题:数据库是有状态应用,扩容非常麻烦1.1 Docker容器:有状态 vs 无状态,差别有多大?在 Docker 的世界里,容器其实分两种:有状态和无状态。 这两者在设计思路、应...
牛客在线求职答疑中心
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
其实主包早就找到工作了,但还是每天都刷
1.4W
2
...
突然对上流社会祛魅了
8377
3
...
快star-x二面凉经
7508
4
...
恋爱四年没想到过自己会出轨
6121
5
...
小红书二面(第二天oc)
5270
6
...
没实习 == 秋招凉?
4734
7
...
记录一下0实习三天速通字节了....
3771
8
...
腾讯的面试,拷问的太全面了
3736
9
...
我寻思压根没这回事,怎么就求职者包装算造假了,怎么不说公司也包装?
3445
10
...
25届毕业现在在家呆了一个多月,没工作
3229
创作者周榜
更多
正在热议
更多
#
计算机有哪些岗位值得去?
#
9284次浏览
88人参与
#
电网笔面经互助
#
35947次浏览
348人参与
#
实习生的蛐蛐区
#
28298次浏览
216人参与
#
听劝,这个简历怎么改
#
177337次浏览
1150人参与
#
应届生,你找到工作了吗
#
15337次浏览
127人参与
#
你找工作的时候用AI吗?
#
10932次浏览
103人参与
#
说说你知道的学历厂
#
19956次浏览
120人参与
#
总结:哪家公司面试体验感最好
#
51466次浏览
367人参与
#
学历贬值真的很严重吗?
#
21648次浏览
161人参与
#
面试尴尬现场
#
15584次浏览
101人参与
#
入职第一天,你准备什么时候下班
#
62838次浏览
380人参与
#
大学生该如何认清当下的就业环境?
#
88665次浏览
567人参与
#
下班后的时间你怎么安排
#
5014次浏览
57人参与
#
打工人的工作餐日常
#
48582次浏览
362人参与
#
哪些公司校招卡第一学历
#
61783次浏览
234人参与
#
哪一瞬间觉得自己长大了
#
5191次浏览
85人参与
#
社会教会你的第一课
#
21611次浏览
272人参与
#
你认为小厂实习有用吗?
#
7923次浏览
79人参与
#
你觉得第一学历对求职有影响吗?
#
92874次浏览
668人参与
#
研究所笔面经互助
#
75376次浏览
470人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务