redis 删除大会阻塞

redis 删除大key为什么会阻塞?

网上查了资料大部分讲的是如何去避免阻塞,却没说到导致阻塞的根本原因是什么;按常规理解删除应该是很快的操作才对,期待能解惑下

这一篇可以帮助理解下:


删除大Key有这些问题:

  • 客户端超时阻塞。由于 Redis 执行命令是单线程处理,然后在操作大 key 时会比较耗时,那么就会阻塞 Redis,从客户端这一视角看,就是很久很久都没有响应。
  • 引发网络阻塞。每次获取大 key 产生的网络流量较大,如果一个 key 的大小是 1 MB,每秒访问量为 1000,那么每秒会产生 1000MB 的流量,这对于普通千兆网卡的服务器来说是灾难性的。
  • 阻塞工作线程。如果使用 del 删除大 key 时,会阻塞工作线程,这样就没办法处理后续的命令。
  • 内存分布不均。集群模型在 slot 分片均匀情况下,会出现数据和查询倾斜情况,部分有大 key 的 Redis 节点占用内存多,QPS 也会比较大。

Redis删除大key时会阻塞是由于Redis是单线程模型,只有一个主线程来处理客户端请求和持久化数据等操作,当执行删除大key操作时,Redis需要将这个key对应的value从内存中删除,而这个删除过程可能需要较长时间,如果此时有其他客户端发来请求,这些请求会被阻塞,等待Redis完成删除操作后才能得到响应。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 关于该问题,我找了一篇非常好的博客,你可以看看是否有帮助,链接:Redis 应用问题解决

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^