redis 大 key 导致读取和删除性能降低的原因是什么呢?

2020-10-20 15:43:12 +08:00
 noble4cc

一个 key 大约 1M 的话,读取性能会退化成几十毫秒,如果 1k 的话只有几毫秒,按道理说读取内存性能很高的呀,为什么退化的这么严重

3654 次点击
所在节点    程序员
23 条回复
noble4cc
2020-10-21 10:08:54 +08:00
@Mirana 是 key 对应的 value 大,一般 key 不会多大
wiewiewie
2020-10-21 14:04:32 +08:00
redis 6 呢?
salaryfly
2020-10-21 16:04:54 +08:00
简短的说一下:
1. 如果有大 key 存在,那么在进行复杂度为 O(n)的操作时,耗时会线性增长。
2. Redis 被设计为基于单线程模型,这意味着某些高耗时操作会导致整体服务操作超时。

一个很典型的例子就是 DEL 和 UNLINK, DEL 是 O(n)的阻塞操作,会导致耗时过高;而 UNILINK 是 O(1)的操作,基本不会有超时情况。两者的主要区别是 UNLINK 用后台线程处理需要删除的数据的内存释放。从这一点也可以看出,删除大 Key 的超时是因为镜像内存释放操作的原因。

antirez:Redis is very fast as long as you use O(1) and O(log_N) commands.

PS. 如果对这个问题有更深的兴趣或者想讨论一些技术问题,
欢迎关注公众号留言交流: Salaryfly

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/716760

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX