前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >异步编程规避Redis的阻塞(中)

异步编程规避Redis的阻塞(中)

作者头像
JavaEdge
发布2022-09-27 20:16:22
3510
发布2022-09-27 20:16:22
举报
文章被收录于专栏:JavaEdgeJavaEdgeJavaEdge

2.2 磁盘交互阻塞点

2.2.1 AOF日志同步写

磁盘I/O一般费时费力,需重点关注。所以Redis开发者也早就把Redis设计为:

  • 子进程生成RDB
  • AOF日志重写

这俩操作由子进程负责执行,慢速的磁盘I/O就不会阻塞主线程。

但Redis直接记录AOF日志时,会根据不同写回策略对数据做落盘保存。 一个同步写盘操作耗时大约1~2ms,若大量写操作需记录在AOF日志,并同步写回,就会阻塞主线程。

2.3 主从节点交互阻塞点

2.3.1 从库加载RDB文件

在主从集群中,主库需生成RDB文件,并传输给从库。 主库在复制过程,创建、传输RDB都由子进程完成,不会阻塞主线程。 但对从库,它在接收了RDB文件后,需使用FLUSHDB命令清空当前数据库,恰好撞车三大阻塞点。

从库在清空当前数据库后,还要把RDB文件载入内存,RDB文件越大,加载越慢。

2.3.2 切片集群实例交互阻塞点

  • 部署Redis切片集群时,每个Redis实例上分配的哈希槽信息,需在不同实例间传递 不过,哈希槽信息量不大
  • 当需负载均衡或有实例数变化时,数据会在不同实例间迁移 而数据迁移是渐进式执行

所以,一般这两类操作对Redis主线程阻塞影响不大。

但若使用Redis Cluster,且同时正好迁移大key,就会阻塞主线程,因Redis Cluster使用的同步迁移。 当无大key时,切片集群的各实例在进行交互时一般不会阻塞主线程。

在主线程中执行以上操作,势必导致主线程长时间无法服务其它请求。 为避免阻塞式操作,Redis提供异步线程机制:Redis会启动一些子线程,把一些任务移交子线程,让它们在后台处理。使用异步线程机制执行操作,可以避免阻塞主线程。

以上这些阻塞式操作可以被异步执行吗?

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-09-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2.2 磁盘交互阻塞点
    • 2.2.1 AOF日志同步写
    • 2.3 主从节点交互阻塞点
      • 2.3.1 从库加载RDB文件
        • 2.3.2 切片集群实例交互阻塞点
        相关产品与服务
        云数据库 Redis
        腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档