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

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: 磁盘I/O一般费时费力,需重点关注。所以Redis开发者也早就把Redis设计为:子进程生成RDBAOF日志重写

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会启动一些子线程,把一些任务移交子线程,让它们在后台处理。使用异步线程机制执行操作,可以避免阻塞主线程。


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

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
运维 监控 NoSQL
Redis 分享-AOF的阻塞简单记录
公司分享讨论一些东西 拿出来大家分享讨论下
751 0
Redis 分享-AOF的阻塞简单记录
|
存储 NoSQL Redis
Redis del bigkey即使开启了lazyfree,为什么还是阻塞的,但是别人又不阻塞?why
Redis del bigkey即使开启了lazyfree,为什么还是阻塞的,但是别人又不阻塞?why
|
NoSQL Redis 数据库
异步编程规避Redis的阻塞(下)
3 可异步执行的阻塞点 在分析阻塞式操作的异步执行的可行性前,先了解异步执行对操作的要求。 若一个操作能被异步执行,说明它不是Redis主线程关键路径上的操作。
79 0
|
NoSQL Redis 数据库
异步编程规避Redis的阻塞(上)
Redis重视影响Redis性能的因素,如: 命令操作 系统配置 关键机制 硬件配置
98 0
|
缓存 NoSQL API
一对一直播平台开发,导致Redis阻塞的原因和解决方式
一对一直播平台开发,导致Redis阻塞的原因和解决方式
|
NoSQL 关系型数据库 MySQL
Redis实现并发阻塞锁方案
由于用户同时访问线上的下订单接口,导致在扣减库存时出现了异常,这是一个很典型的并发问题,本篇文章为解决并发问题而生,采用的技术为Redis锁机制+多线程的阻塞唤醒方法。
|
NoSQL Redis
Redis 阻塞(学习笔记七)
1、持久化引起的主线程阻塞操作:fork阻塞、AOF刷盘阻塞、HugePage写操作阻塞 2、
746 0
|
16天前
|
canal 缓存 NoSQL
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
根据对一致性的要求程度,提出多种解决方案:同步删除、同步删除+可靠消息、延时双删、异步监听+可靠消息、多重保障方案
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
|
2月前
|
缓存 NoSQL Redis
【Azure Redis 缓存】Redission客户端连接Azure:客户端出现 Unable to send PING command over channel
【Azure Redis 缓存】Redission客户端连接Azure:客户端出现 Unable to send PING command over channel
|
2月前
|
缓存 NoSQL Java
Redis深度解析:解锁高性能缓存的终极武器,让你的应用飞起来
【8月更文挑战第29天】本文从基本概念入手,通过实战示例、原理解析和高级使用技巧,全面讲解Redis这一高性能键值对数据库。Redis基于内存存储,支持多种数据结构,如字符串、列表和哈希表等,常用于数据库、缓存及消息队列。文中详细介绍了如何在Spring Boot项目中集成Redis,并展示了其工作原理、缓存实现方法及高级特性,如事务、发布/订阅、Lua脚本和集群等,帮助读者从入门到精通Redis,大幅提升应用性能与可扩展性。
58 0
下一篇
无影云桌面