细数-Redis-美团二面-阻塞的九种情况 (细数指什么数字)

教程大全 2025-07-09 00:36:49 浏览

哈喽大家好,我是阿Q!

前两天去美团面试的陈同学回来了,看他满脸泄气的样子,准是没拿到 Offer。

听了他面试的经过,真替他感到惋惜。究其原因,是被一道面试题拦住了去路:看你简历上写着精通 Redis,请你总结一下 Redis 中存在的阻塞问题吧。

正好阿Q这几天正在研究 Redis,就顺便在这儿给大家做个总结。

命令阻塞

使用不当的命令造成客户端阻塞:

这些命令时间复杂度是O(n),有时候也会全表扫描,随着n的增大耗时也会越大从而导致客户端阻塞。

SAVE 阻塞

大家都知道 Redis 在进行 RDB 快照的时候,会调用系统函数 fork() ,创建一个子线程来完成临时文件的写入,而触发条件正是配置文件中的 save 配置。

当达到我们的配置时,就会触发 bgsave 命令创建快照,这种方式是不会阻塞主线程的,而手动执行 save 命令会在主线程中执行,阻塞主线程。

同步持久化

当 Redis 直接记录 AOF 日志时,如果有大量的写操作,并且配置为同步持久化

APPendfsync always

即每次发生数据变更会被立即记录到磁盘,因为写磁盘比较耗时,性能较差,所以有时会阻塞主线程。

AOF 重写

阻塞就是出现在第2步的过程中,将缓冲区中新数据写到新文件的过程中会产生阻塞。

AOF 日志

AOF 的日志记录不像关系型数据库那样在执行命令之前记录日志(方便故障恢复),而是采用先执行命令后记录日志的方式。

原因就是 AOF 记录日志是不会对命令进行语法检查的,这样就能减少额外的检查开销,不会对当前命令的执行产生阻塞,但可能会给下一个操作带来阻塞风险。

这是因为 AOF 日志也是在主线程中执行的,如果在把日志文件写入磁盘时,磁盘写压力大,就会导致写盘很慢,进而导致后续的操作也无法执行了。

大 Key 问题

大 key 并不是指 key 的值很大,而是 key 对应的 value 很大。

大 key 造成的阻塞问题如下:

查找大 key

当我们在使用 Redis 自带的–bigkeys参数查找大 key 时,最好选择在从节点上执行该命令,因为主节点上执行时,会阻塞主节点。

redis-rdb-tools:Python 语言写的用来分析 Redis 的 RDB 快照文件用的工具

rdb_bigkeys:Go 语言写的用来分析 Redis 的 RDB 快照文件用的工具,性能更好。

删除大 key

删除操作的本质是要释放键值对占用的内存空间。

释放内存只是第一步,为了更加高效地管理内存空间,在应用程序释放内存时,操作系统需要把释放掉的内存块插入一个空闲内存块的链表,以便后续进行管理和再分配。这个过程本身需要一定时间,而且会阻塞当前释放内存的应用程序。

所以,如果一下子释放了大量内存,空闲内存块链表操作时间就会增加,相应地就会造成 Redis主线程的阻塞,如果主线程发生了阻塞,其他所有请求可能都会超时,超时越来越多,会造成 Redis 连接耗尽,产生各种异常。

清空数据库

清空数据库和上面 bigkey 删除也是同样道理,flushdb、flushall 也涉及到删除和释放所有的键值对,也是 Redis 的阻塞点。

集群扩容

Redis 集群可以进行节点的动态扩容缩容,这一过程目前还处于半自动状态,需要人工介入。

在扩缩容的时候,需要进行数据迁移。而 Redis 为了保证迁移的一致性,迁移所有操作都是同步操作。

执行迁移时,两端的 Redis 均会进入时长不等的阻塞状态,对于小Key,该时间可以忽略不计,但如果一旦 Key 的内存使用过大,严重的时候会触发集群内的故障转移,造成不必要的切换。


山中访友的主要内容是什么?

《山中访友》出自著名诗人、散文家李汉荣先生之手,是他发表于1995年第三期《散文》杂志的一篇杰作。 这篇散文篇幅短小而述事简略,记作者独自到山野林间的一天游历,因为带着动情的眼光,所见之景都有许多新奇的色彩。 这是一篇构思新奇、富有想象力、充满好奇心的散文。 作者“带着满怀的好心情”,走进山林,探访山中的“朋友”,与“朋友”互诉心声,营造了一个如诗如画的世界,表达了对大自然的热爱之情。 本文作为人教版语文课本六年级上册“感受自然”的第一篇课文,目的一是通过感受作者描绘的境界,体会他一路上的好心情,培养学生热爱自然、亲近自然的美好情感;二是学习作者通过比喻、拟人、排比、想象来表达情感的方法,并积累语言。 本课的重点是感受作者对山里的“朋友”那份深厚的感情,并体会作者所表达情感的方法。 走出门,就与含着露水和栀子花气息的好风撞个满怀。 早晨,好清爽!不坐车,不邀游伴,也不带什么礼物,就带着满怀的好心情,哼段小曲,踏着一条幽径,独自去访问老朋友。 那座古桥,是我要拜访的第一个老朋友。 德高望重的老桥,你在这涧水上站了几百年了?你累吗?你把多少人马渡过彼岸,你把滚滚流水送向远方,你躬着腰,俯身望着水中的人影鱼影月影。 波光明灭,泡沫聚散,岁月是一去不返的逝川,惟有你坚持着,你那从不改变的姿态,让我看到了一种古老而坚韧的灵魂。 走进这片树林,每一株树都是我的知己,向我打着青翠的手势。 有许多鸟唤我的名字,有许多露珠与我交换眼神。 我靠在一棵树上,静静地,以树的眼睛看周围的树,我发现每一株树都在看我。 我闭上眼睛,我真的变成了一株树,脚长出根须,深深扎进泥土和岩层,呼吸地层深处的元气,我的头发长成树冠,我的手变成树枝,我的思想变成树汁,在年轮里旋转、流淌,最后长出树籽,被鸟儿衔向远山远水。 你好,山泉姐姐!你捧一面明镜照我,是要照出我的浑浊吗?你好,溪流妹妹!你吟着一首小诗,是邀我与你唱和吗?你好,白云大嫂!月亮的好女儿,天空的好护士,你洁白的身影,让憔悴的天空返老还童,露出湛蓝的笑容。 你好,瀑布大哥!雄浑的男高音,纯粹的歌唱家,不拉赞助,不收门票,天生的金嗓子,从古唱到今。 你好呀,悬崖爷爷!高高的额头,刻着玄奥的智慧,深深的峡谷漾着清澈的禅心,抬头望你,我就想起了历代的隐士和高僧,你也是一位无言的禅者,云雾携来一卷卷天书,可是出自你的手笔?喂,云雀弟弟,叽叽喳喳说些什么?我知道你们是些纯洁少年,从来不说是非,你们津津乐道的,都是飞行中看到的好风景!捧起一块石头,轻轻敲击,我听见远古火山爆发的声浪,我听见时间的隆隆回声。 拾一片落叶,细数精致的纹理,那都是命运神秘的手相,在它走向泥土的途中,我加入了这短暂而别有深意的仪式。 采一朵小花,插上我的头发,此刻就我一人,花不会笑我,鸟不会羞我,在无人的山谷,我头戴鲜花,眼含柔情,悄悄地做了一会儿女性。 忽然下起阵雨,像有一千个侠客在天上吼叫,又像有一千个喝醉了酒的诗人在云头朗诵,又感动人又有些吓人。 赶快跑到一棵老柏树下,慈祥的老柏树立即撑起了大伞。 满世界都是雨,惟我站立的地方没有雨,却成了看雨的好地方,谁能说这不是天地给我的恩泽?俯身凝神,才发现许多蚂蚁也在树下避雨,用手捧起几只蚂蚁,好不动情,蚂蚁,我的小弟弟,茫茫天地间,我们有缘分,也做了一回患难兄弟。 雨停了。 幽谷里传出几声犬吠,云岭上掠过一群归鸟。 我也该回家了。 于是,我轻轻地招手,告别了山里的众朋友, 带回了满怀的好心情,好记忆,顺便还带回一路月色……走出门,就与微风撞了个满怀,风中含着露水和栀子花的气息。 早晨,好清爽!不坐车,不邀游伴,也不带什么礼物,就带着满怀的好心情,踏一条幽径,独自去访问我的朋友。 那座古桥,是我要拜访的第一个老朋友。 啊,老桥,你如一位德高望重的老人,在这涧水上站了几百年了吧?你把多少人马渡过对岸,滚滚河水流向远方,你弓着腰,俯身凝望着那水中的人影、鱼影、月影。 波光明灭,泡沫聚散,唯有你依然如旧。 走进这片树林,鸟儿呼唤我的名字,露珠与我交换眼神。 每一棵树都是我的知己,它们迎面送来无边的青翠,每一棵树都在望着我。 我靠在一棵树上,静静地,仿佛自己也是一棵树。 我脚下长出的根须,深深扎进泥土和岩层;头发长成树冠,胳膊变成树枝,血液变成树的汁液,在年轮里旋转、流淌。 这山中的一切,哪个不是我的朋友?我热切地跟他们打招呼:你好,清凉的山泉!你捧出一面明镜,是要我重新梳妆吗?你好,汩汩的溪流!你吟诵着一首首小诗,是邀我与你唱和吗?你好,飞流的瀑布!你天生的金嗓子,雄浑的男高音多么有气势。 你好,陡峭的悬崖!深深的峡谷衬托着你挺拔的身躯,你高高的额头上仿佛刻满了智慧。 你好,悠悠的白云!你洁白的身影,让天空充满宁静,变得更加湛蓝。 喂,淘气的云雀,叽叽喳喳地在谈些什么呢?我猜你们津津乐道的,是飞行中看到的好风景。 捡起一朵落花,捧在手中,我嗅到了大自然的芬芳清香;拾一片落叶,细数精致的纹理,我看到了它蕴含的生命的奥秘,在它们走向泥土的途中,我加入了这短暂而别有深意的仪式;捧起一块石头,轻轻敲击,我听见远古火山爆发的声浪,听见时间隆隆的回声。 忽然,雷阵雨来了,像有一千个侠客在天上吼叫,又像有一千个醉酒的诗人在云头吟咏。 满世界都是雨,头顶的岩石像为我撑起的巨伞。 我站立之处成了看雨的好地方,谁能说这不是天地给我的恩泽?雨停了。 幽谷里传出几声犬吠,云岭上掠过一群归鸟。 我该回家了。 我轻轻地招手,告别了山里的好朋友, 带回了满怀的好心情、好记忆,还带回一路月色。 《山中访友》是一篇构思新奇、富有想像力、充满童心和好奇心的抒情散文。 作者“带着满怀的好心情”,走进山林,探访“山中的众朋友”,与“朋友们”互诉心声,营造了一个如诗如画的童话世界,表达了对大自然的热爱之情。 在叙述方式上,本文独具匠心。 题目《山中访友》给人的感觉似乎是作者要到山中去寻访一位朋友,但读到文章的第3段时,读者便会恍然大悟,原来作者要访的是古桥、树林、山泉、小溪……是一些自然界的朋友。 通篇以这样的方式叙述,使读者也进到画面中,进到作者的心境中,仿佛这些自然界的朋友,不但是作者的,也是我们每一位读者的,于是更加感到亲切。 作者根据表达的需要,还恰当地变换叙述人称,对山中的“朋友”,作者有时用第三人称叙述,有时感情强烈了又以第二人称称呼,从而使情感表达得更加充分。 本文想像丰富、新奇,充满童心童趣,有浪漫色彩。 如:“我闭上眼睛,我真的变成了一株树,脚长出根须,深深扎进泥土和岩层,呼吸地层深处的元气,我的头发长成树冠,我的手变成树枝,我的思想变成树汁,在年轮里旋转、流淌,最后长出树籽,被鸟儿衔向远山远水。 ”作者把自己想像为一株树,使树与“我”融为一体。 又如:“你好呀,悬崖爷爷!高高的额头,刻着玄奥的智慧,深深的峡谷漾着清澈的禅心,抬头望你,我就想起了历代的隐士和高僧,你也是一位无言的禅者,云雾携来一卷卷天书,可是出自你的手笔?”想像中,悬崖似乎成了一位智者。 由此可见,想像使景物栩栩如生,灵气飞扬,也使文笔生动活泼,如溪水畅流,不时激起美丽的浪花。 读这篇文章,绝不会有呆板、陈腐的感觉,你会时时为作者的童心所打动,时时为流淌在字里行间的激情所感染。 真的,如果用你的心去感受作者的心,透过语言文字,看看那充满诗意的画面,你就会进入作者所描绘的“童话般的世界”。 拥有想象力,语言运用了拟人与比喻手法,富有节奏感,显现出山中景色的美好。

Java rediscachepipeline怎么检查key是否存在

Java使用Pipeline对Redis批量读写(hmset&hgetall)一般情况下,Redis Client端发出一个请求后,通常会阻塞并等待Redis服务端处理,Redis服务端处理完后请求命令后会将结果通过响应报文返回给Client。 这有点类似于HBase的SCan,通常是Client端获取每一条记录都是一次RPC调用服务端。 在Redis中,有没有类似HBase Scanner Caching的东西呢,一次请求,返回多条记录呢?有,这就是Pipline。 官方介绍通过pipeline方式当有大批量的操作时候,我们可以节省很多原来浪费在网络延迟的时间,需要注意到是用pipeline方式打包命令发送,redis必须在处理完所有命令前先缓存起所有命令的处理结果。 打包的命令越多,缓存消耗内存也越多。 所以并不是打包的命令越多越好。

山中访友中的好词好句是

好词:德高望重、岁月悠悠、波光明灭、泡沫聚散、津津乐道、细数精致好句: ②啊,老桥,你如一位德高望重的老人,在这涧水上站了几百年了吧? 把“老桥”比喻为“一位德高望重的老人”,不但写出了桥的古老,而且也突出了它默默无闻为大众服务的品质,充分表达了作者对桥的赞美和敬佩。 ⑤你好,清凉的山泉!你捧出一面明镜,是要我重新梳妆吗?你好,汩汩的溪流!你吟诵着一首首小诗,是邀我与你唱和吗?你好,飞流的瀑布!……这一组句子是写“我”跟山中的“朋友”在打招呼,内容一致,结构相似,是一组排比句,同时运用拟人手法,把“我”和山里“朋友”之间的那种深厚情谊淋漓尽致地表达了出来。 采用第二人称,读来倍感亲切、热情。

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐