首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
躺平怪
中南大学 C++
发布于广东
关注
已关注
取消关注
@每天两题神清气爽:
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
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
昨天 13:27
科大讯飞_教育BG_后端开发(准入职员工)
小米三面手撕噩梦级别难度
秋招面到小米三面,做不出来直接整段垮掉!#一人分享一道面试手撕题#
一人分享一道面试手撕题
点赞
评论
收藏
分享
2025-12-31 09:28
天津大学 ARM工程师
地平线:嵌软岗位 拷打
1.自我介绍2.freerots主要是微内核,主要有哪些组成部分,内部任务间的通信方式有哪些?3.freertos任务切换的过程,详细一点如何切换的,保存怎么恢复的?4.freertos任务有哪些不同的状态?高优先级任务被阻塞或者挂起,再执行低优先级任务5.用过单片机的哪些外设?6.PWM除了占空比之外还有什么要素?频率,周期,占空比7.蓝牙的底层协议?8.linux的进程间通信机制?9.进程间的调度方式?10.linux的内存管理?11.了解Linux的一些驱动么?12.对VFS的框架有了解么?13.常用的linux基础命令14.GCC编译一般分为那几部分?15.用过vim么,介绍vim常用...
点赞
评论
收藏
分享
2025-12-20 21:40
已编辑
门头沟学院 Java
27届NPC鼠鼠 求拷打
双非本 一段小厂 寒假能够冲击中厂吗 求简历拷打。求各位牛友指点一下,想在寒假海投冲一下中厂有没有机会,简历有没有需要修改的地方
123123d:
简历还没有你的照片清晰,你到底是来秀照片,还是改简历的
点赞
评论
收藏
分享
2025-12-04 16:19
已编辑
字节跳动_前端开发实习生(实习员工)
天塌了!!!
刚找到实习 字节HR就给我打电话了 说我简历通过了可恶 之前BOSS直聘上的说我简历挂了明天好好准备 加油
解zj:
但是想想也挺好的 这么多天也面了挺多家公司 也越来越有感觉了 希望明天能有一个好的结果
投递字节跳动等公司8个岗位
点赞
评论
收藏
分享
2025-12-30 15:06
上海得物信息集团有限公司_java开发工程师(准入职员工)
得物内推,得物内推码
得物测开一面面经,摘自优秀牛油面试时间:24/10/19面试时长:30 min1. 自我介绍; 2. 为什么找测试岗位; 3. 讲一下测试的一般流程; 4. 设计测试用例的常用方法; 5. 如果需要测试一个接口,去测试一个并发场景,应该如何去做; 6. 如何去设置多线程; 7. 10万级别的接口访问量,如何去模拟; 8. 数据库了解如何; 9. 2000万中有2万条数据是热数据,需要经常使用的,如何实现; 10. socket 和 http 的区别; 11. 现场直播或者打游戏,在线视频,使用 http 还是 socket; 12. 如果你负责一个项目,需要多个团队或者业务组合作,作为项目负责...
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
🔥2026创作新起点:《新年启航计划》来袭,三大赛道等你来冲!
1.4W
2
...
一大波手撕正在靠近!
1.1W
3
...
为什么你的实习是“无效实习”?又该如何做
5605
4
...
秋招13面字节终上岸
2539
5
...
uu们,面试的时候一定要大大方方的啊!
2324
6
...
腾讯游戏后端一面
2242
7
...
帕斯亚科技UE客户端面经
2049
8
...
千里智驾毁约
2020
9
...
快手Java日常实习一面
1824
10
...
双非本科,嵌入式秋招上岸的一次总结
1572
创作者周榜
更多
正在热议
更多
#
入职第一天
#
2631次浏览
35人参与
#
哪些公司在招寒假实习?
#
740次浏览
16人参与
#
去年的flag与今年的小目标
#
749次浏览
24人参与
#
有深度的简历长什么样?
#
2483次浏览
48人参与
#
26年哪些行业会变好/更差
#
1256次浏览
25人参与
#
你都用AI做什么
#
978次浏览
32人参与
#
写论文的崩溃时刻
#
705次浏览
19人参与
#
一人分享一道面试手撕题
#
5328次浏览
298人参与
#
应届生应该先就业还是先择业
#
159603次浏览
796人参与
#
你不能接受的企业文化有哪些
#
1701次浏览
38人参与
#
元戎启行求职进展汇总
#
47041次浏览
330人参与
#
科大讯飞求职进展汇总
#
352312次浏览
3055人参与
#
应届生第一份工作最好去大厂吗?
#
123718次浏览
1097人参与
#
小米求职进展汇总
#
997683次浏览
6500人参与
#
面试之前应该如何准备?
#
208699次浏览
2304人参与
#
机械制造秋招总结
#
98758次浏览
880人参与
#
电网笔面经互助
#
57301次浏览
473人参与
#
实习中的菜狗时刻
#
456366次浏览
3521人参与
#
正在春招的你,也参与了去年秋招吗?
#
342704次浏览
2576人参与
#
帆软软件工作体验
#
8577次浏览
34人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务