首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
课程
专栏·文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
在线笔面试、雇主品牌宣传
登录
/
注册
以木
南京航空航天大学 计算机类
发布于江苏
关注
已关注
取消关注
@每天两题神清气爽:
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
全部评论
推荐
最新
楼层
滴滴
校招火热招聘中
官网直投
相关推荐
JackChen_1
昨天 15:22
已编辑
华南理工大学 计算机类
华为暑期开奖
我是华为孝子!!!4.17笔试(100%,100%,85%),4.25一面,4.28主管们,5.21上午HR问意向,5.21下午发offer(图片就不方便展示了)。部门是集团IT的IT平台服务部(base深圳)
华为开奖102人在聊
点赞
评论
收藏
转发
失败症晚期
昨天 15:35
已编辑
中国科学技术大学 计算机类
今天滴滴会开奖吗
孩子等得好辛苦,滴滴真的收留我吧------------------------------------------------------5.21更新,接到电话啦
滴滴开奖32人在聊
点赞
评论
收藏
转发
牛客409370218号
03-26 09:59
大连东软信息学院
春招
要是boss都这样而不是已读不回好像也没那么让人难过
点赞
评论
收藏
转发
勇敢的95后面向对象
05-19 21:30
投资经理
毕业了去中国银行工作好还是去民生银行好?
我之前进过中行,现在已经离职了,简单分析一下:首先说收入,这两年的银行,收入和几年前风光的时候没有可比性,由于保密协议是终身制的,哪怕离职也不能公开,我不能说太详细,只能说除了营销岗位和领导之外,收入方面和普通白领没有任何优势,但是公积金很高。而领导和营销岗位的工资,多少就完全靠自己的能力和人脉了。其次说工作强度,可以说你无论进入任何大型金融机构,包括证券公司包括保险公司包括银行,都会有很大的加班量,银行尤其多,一开始做柜员,每天关门后要盘库,清点,一般下班要5点到7点了,遇到帐弄错了12点都有可能。然后回家还要练技能,点钞、打字、银行内部系统操作(中行叫IT蓝图)、计算机。反正如果是个上进的...
投递中国银行等公司6个岗位 >
点赞
评论
收藏
转发
点赞
收藏
评论
分享
回复帖子
提到的真题
返回内容
全站热榜
1
...
开摆了,写小说去了
9503
2
...
没offer的我们也很优秀偶
8724
3
...
【有奖活动】浅聊一下我的实习⭐
8575
4
...
双非本 腾讯WXG暑期已offer | 附面经
8427
5
...
华为暑期开奖
6773
6
...
快手二面凉经
5573
7
...
滴滴秋储-服务端开发 OC
5490
8
...
真有必要读研吗
5486
9
...
美团前端一二面(已oc
5444
10
...
华为实习offer!终于告一段落了
5308
正在热议
#
牛客帮帮团来啦!有问必答
#
823465次浏览
13048人参与
#
机械制造薪资爆料
#
320260次浏览
3732人参与
#
晒一晒我的offer
#
3469314次浏览
55264人参与
#
0offer是寒冬太冷还是我太菜
#
428207次浏览
4946人参与
#
你觉得找工作该拿大厂还是小厂练手
#
61677次浏览
872人参与
#
荣耀求职进展汇总
#
70686次浏览
717人参与
#
如果可以选,你最想从事什么工作
#
186204次浏览
3078人参与
#
实习生应该准时下班吗
#
80809次浏览
593人参与
#
金三银四,你有感觉到吗
#
329423次浏览
4224人参与
#
海康威视求职进展汇总
#
101654次浏览
1217人参与
#
正在春招的你,也参与了去年秋招吗?
#
136510次浏览
1705人参与
#
实习必须要去大厂吗?
#
13886次浏览
220人参与
#
实习工作,你找得还顺利吗?
#
42494次浏览
469人参与
#
我在牛爱网找对象
#
50025次浏览
325人参与
#
软件开发投递记录
#
479291次浏览
7244人参与
#
宁德时代求职进展汇总
#
37086次浏览
413人参与
#
国企vs私企,你更想去?
#
20281次浏览
205人参与
#
求职遇到的搞笑事件
#
19694次浏览
287人参与
#
想实习转正,又想准备秋招,我该怎么办
#
117967次浏览
1332人参与
#
正在实习的你,有转正机会吗?
#
106495次浏览
1044人参与
牛客网
牛客企业服务