16 异步机制:如何避免单线程模型的阻塞?

Redis的单线程模型可能导致五大阻塞因素:客户端交互、磁盘交互、主从节点交互、切片集群交互。通过异步线程机制,Redis能异步执行删除操作、AOF日志同步写,但读操作和从库加载AOF日志必须同步执行。Redis使用子线程处理非关键路径操作,提高性能。
摘要由CSDN通过智能技术生成

Redis 之所以被广泛的使用,其原因就是 Redis 能够支持高性能的访问,但是对于使用单线程模型的 Redis 而言,造成 Redis 被阻塞有五大方面的潜在因素。

一、Redis 内部的阻塞操作

Redis 在运行之后就需要和多个实例之间进行交互,这些交互的过程涉及到的不同的操作就会阻塞 Redis,其中有四个主要方面的交互:客户端交互,主从库交互,磁盘交互和切片集群交互。

  • 客户端交互:网络IO,键值对的增删改查,数据库的操作
  • 磁盘交互:生成 RDB 文件,生成 AOF 日志文件,AOF 日志的重写
  • 主从节点交互:主库的重选,传输 RDB 文件,接收 RDB 文件,清空数据库,加载 RDB 文件。
  • 切片集群交互:各个 Redis 实例之间哈希槽信息的传输,以及数据迁移。

(1)与客户端交互中的阻塞点

  • 网络 IO 有时候会比较的慢,但是 Redis 使用了多路复用机制,解决了 Redis 阻塞在等待网络的连接及其等待客户发送请求等的过程中,因此网络 IO 不是造成 Redis 被阻塞的原因。
  • 客户端发送的键值对请求操作是由 Redis 主线程负责执行的,因此对于一些时间复杂度比较高的操作就肯定会造成阻塞主线程。而哪些是时间复杂度比较高的操作?
    • 集合的全量查询及其聚合操作
      • 这些操作通常时间复杂度就是 O(n),对于读写性能高的 Redis 而言这个是第一个阻塞点。
    • bigkey 的删除操作
      • big
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值