iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Redis的异步机制是什么
  • 241
分享到

Redis的异步机制是什么

2023-06-30 14:06:49 241人浏览 泡泡鱼
摘要

这篇文章主要讲解了“Redis的异步机制是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Redis的异步机制是什么”吧!一、Redis 的阻塞点和 Redis 实例交互的对象,以及交互时

这篇文章主要讲解了“Redis的异步机制是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Redis的异步机制是什么”吧!

一、Redis 的阻塞点

和 Redis 实例交互的对象,以及交互时会发生的操作:

  • 客户端:网络 io,键值对增删改查操作,数据库操作;

  • 磁盘:生成 RDB 快照,记录 AOF 日志,AOF 日志重写;

  • 主从节点:主库生成、传输 RDB 文件,从库接收 RDB 文件、清空数据库、加载 RDB 文件;

  • 切片集群实例:向其他实例传输哈希槽信息,数据迁移。

4 类交互对象和具体的操作之间的关系:

Redis的异步机制是什么

和客户端交互时的阻塞点:

网络 IO 有时候会比较慢,但是 Redis 使用了 IO 多路复用机制,避免了主线程一直处在等待网络连接或请求到来的状态,所以网络 IO 不是导致 Redis 阻塞的因素。

键值对的增删改查操作是 Redis 和客户端交互的主要部分,也是 Redis 主线程执行的主要任务。复杂度高的增删改查操作肯定会阻塞 Redis。

判断操作复杂度高低的标准:看操作的复杂度是否为 O(N)

Redis 的第一个阻塞点:集合全量查询和聚合操作:

Redis 中涉及集合的操作复杂度通常为 O(N),使用时需重视起来。
例如集合元素全量查询操作 HGETALL、SMEMBERS,以及集合的聚合统计操作,例如求交、并和差集。

Redis 的第二个阻塞点 :bigkey 删除操作

集合自身的删除操作同样也有潜在的阻塞风险。删除操作的本质是要释放键值对占用的内存空间。 释放内存只是第一步,为了更加高效地管理内存空间,在应用程序释放内存时,操作系统需要把释放掉的内存块插入一个空闲内存块的链表,以便后续进行管理和再分配。

这个过程本身需要一定时间,而且会阻塞当前释放内存的应用程序,如果一下子释放了大量内存,空闲内存块链表操作时间就会增加,相应地就会造成 Redis 主线程的阻塞。

释放大量内存的时机:在删除大量键值对数据的时候,删除包含了大量元素的集合,也称为 bigkey 删除

不同元素数量的集合在进行删除操作时所消耗的时间:

Redis的异步机制是什么

得出三个结论:

  • 当元素数量从 10 万增加到 100 万时,4 大集合类型的删除时间的增长幅度从 5 倍上升到了近 20 倍;

  • 集合元素越大,删除所花费的时间就越长;

  • 当删除有 100 万个元素的集合时,最大的删除时间绝对值已经达到了 1.98s(Hash 类 型)。Redis 的响应时间一般在微秒级别,一个操作达到了近 2s,不可避免地会阻塞主线程。

Redis 的第三个阻塞点:清空数据库

既然频繁删除键值对都是潜在的阻塞点了,在 Redis 的数据库级别操作中,清空数据库(例如 FLUSHDB 和 FLUSHALL 操作)也是一个潜在的阻塞风险,因为它涉及到删除和释放所有的键值对。

Redis 的第四个阻塞点:AOF 日志同步写

磁盘 IO 一般都是比较费时费力的,需要重点关注。 Redis 开发者早已认识到磁盘 IO 会带来阻塞,所以把 Redis 设计为采用子进程的方式生成 RDB 快照文件、执行 AOF 日志重写操作。由子进程负责执行,慢速的磁盘 IO 就不会阻塞主线程了。

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

Redis 的第五个阻塞点:从库加载 RDB 文件

在主从集群中,主库需要生成 RDB 文件,并传输给从库。

主库在复制的过程中,创建和传输 RDB 文件都是由子进程来完成的,不会阻塞主线程。
但是从库在接收了 RDB 文件后,需要使用 FLUSHDB 命令清空当前数据库,正好撞上了第三个阻塞点。

从库在清空当前数据库后,需要把 RDB 文件加载到内存,这个过程的快慢和 RDB 文件的大小密切相关,RDB 文件越大,加载过程越慢。

切片集群实例交互时的阻塞点

部署 Redis 切片集群时,每个 Redis 实例上分配的哈希槽信息需要在不同实例间进行传递,当需要进行负载均衡或者有实例增删时,数据会在不同的实例间进行迁移。不过哈希槽的信息量不大,而数据迁移是渐进式执行的,这两类操作对 Redis 主线程的阻塞风险不大。

如果使用了 Redis Cluster 方案,而且同时正好迁移的是 bigkey 的话,就会造成主线程的阻塞,因为 Redis Cluster 使用了同步迁移。

五个阻塞点:

  • 集合全量查询和聚合操作;

  • bigkey 删除;

  • 清空数据库;

  • AOF 日志同步写;

  • 从库加载 RDB 文件。

二、可以异步执行的阻塞点

为了避免阻塞式操作,Redis 提供了异步线程机制:

Redis 会启动一些子线程,然后把一些任务交给这些子线程,让它们在后台完成,而不再由主线程来执行这些任务。可以避免阻塞主线程。

异步执行对操作的要求:

一个能被异步执行的操作并不是 Redis 主线程的关键路径上的操作(客户端把请求发送给 Redis 后,等着 Redis 返回数据结果的操作)。

Redis的异步机制是什么

主线程接收到操作 1 后,操作 1 并不用给客户端返回具体的数据,主线程可以把它交给后台子线程来完成,同时只要给客户端返回一个“OK”结果就行。
在子线程执行操作 1 的时候,客户端又向 Redis 实例发送了操作 2,客户端是需要使用操作 2 返回的数据结果的,如果操作 2 不返回结果,那么客户端将一直处于等待状态。

操作 1 就不算关键路径上的操作,因为它不用给客户端返回具体数据,所以可以由后台子线程异步执行。
操作 2 需要把结果返回给客户端,它就是关键路径上的操作,所以主线程必须立即把这个操作执行完。

  • Redis 读操作是典型的关键路径操作,因为客户端发送了读操作之后,就会等待读取的数据返回,以便进行后续的数据处理。而 Redis 的第一个阻塞点“集合全量查询 和聚合操作”都涉及到了读操作,不能进行异步操作。

  • 删除操作并不需要给客户端返回具体的数据结果,不算是关键路径操作。“bigkey 删除”和“清空数据库”都是对数据做删除,并不在关键路径上。可以使用后台子线程来异步执行删除操作。

  • “AOF 日志同步写”,为了保证数据可靠性,Redis 实例需要保证 AOF 日志中的操作记录已经落盘,这个操作虽然需要实例等待,但它并不会返回具体的数据结果给实例。所以可以启动一个子线程来执行 AOF 日志的同步写。

  • “从库加载 RDB 文件”要想对客户端提供数据存取服务,就必须把 RDB 文件加载完成。这个操作也属于关键路径上的操作,必须让从库的主线程来执行。

除了“集合全量查询和聚合操作”和“从库加载 RDB 文 件”,其他三个阻塞点涉及的操作都不在关键路径上,可以使用 Redis 的异步子线程机制来实现 bigkey 删除,清空数据库,以及 AOF 日志同步写。

三、异步的子线程机制

Redis 主线程启动后,会使用操作系统提供的 pthread_create 函数创建 3 个子线程,负责AOF 日志写操作、键值对删除、文件关闭的异步执行。

主线程通过一个链表形式的任务队列和子线程进行交互。

当收到键值对删除和清空数据库的操作时,主线程会把这个操作封装成一个任务,放入到任务队列中,然后给客户端返回一个完成信息,表明删除已经完成。

但实际上,这个时候删除还没有执行,等到后台子线程从任务队列中读取任务后,才开始实际删除键值对,并释放相应的内存空间。这种异步删除也称为惰性删除 (lazy free)。

当 AOF 日志配置成 everysec 选项后,主线程会把 AOF 写日志操作封装成一个任务,也放到任务队列中。后台子线程读取任务后,开始自行写入 AOF 日志,主线程就不用一直等待 AOF 日志写完了。

Redis 中的异步子线程执行机制:

Redis的异步机制是什么

异步的键值对删除和数据库清空操作是 Redis 4.0 后提供的功能,Redis 也提供了新的命令来执行这两个操作:

  • 键值对删除:集合类型中有大量元素(例如有百万级别或千万级别元素)需要删除时,建议使用 UNLINK 命令;

  • 清空数据库:可以在 FLUSHDB 和 FLUSHALL 命令后加上 ASYNC 选项,让后台子线程异步地清空数据库。

FLUSHDB ASYNC FLUSHALL AYSNC

感谢各位的阅读,以上就是“Redis的异步机制是什么”的内容了,经过本文的学习后,相信大家对Redis的异步机制是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Redis的异步机制是什么

本文链接: https://www.lsjlt.com/news/329332.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Redis的异步机制是什么
    这篇文章主要讲解了“Redis的异步机制是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Redis的异步机制是什么”吧!一、Redis 的阻塞点和 Redis 实例交互的对象,以及交互时...
    99+
    2023-06-30
  • node的异步机制是什么
    这篇“node的异步机制是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“node的异步...
    99+
    2024-04-02
  • 浅谈Redis的异步机制
    目录前言一、Redis 的阻塞点4 类交互对象和具体的操作之间的关系:切片集群实例交互时的阻塞点二、可以异步执行的阻塞点三、异步的子线程机制总结前言 命令操作、系统配置、关键机制、硬...
    99+
    2024-04-02
  • 什么是异步redis
    异步redis是指访问数据的机制,异步则指主动请求数据后便可以继续处理其它任务,随后等待IO操作完毕的通知,得到通知之后,再去选择对这些数据做操作。...
    99+
    2024-04-02
  • Android handler异步消息机制是什么
    Android中的Handler是一种基于消息机制的异步处理机制。它可以用来将消息或Runnable对象发送到主线程或者后台线程中执...
    99+
    2023-10-18
    Android
  • 什么是异步非阻塞redis
    异步非阻塞redis又叫异步IO,在IO多路复用模型中,事件循环将文件句柄的状态事件通知给用户线程,由用户线程自行读取数据、处理数据。而在异步IO模型中,当用户线程收到通知时,数据已被内核读取并存储于用户线程指定的缓冲区内,内核在IO完成后...
    99+
    2024-04-02
  • android异步消息处理机制是什么
    Android异步消息处理机制是一种在主线程以外的线程中执行任务的机制。它主要包括以下几个重要的组件:1. Handler:负责发送...
    99+
    2023-09-13
    android
  • Node中异步编程机制的原理是什么
    这期内容当中小编将会给大家带来有关Node中异步编程机制的原理是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。目前的异步编程主要解决方案有:事件发布/订阅模式Prom...
    99+
    2024-04-02
  • redis异步队列是什么意思
    redis异步队列是指将队列里的东西进行异步处理,异步即是主动请求数据后便可以继续处理其它任务,随后等待IO操作完毕的通知,得到通知之后,再去选择对这些数据做操作。...
    99+
    2024-04-02
  • Vue异步更新机制和nextTick的原理是什么
    本篇内容介绍了“Vue异步更新机制和nextTick的原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所...
    99+
    2024-04-02
  • redis缓存机制是什么
    redis 的缓存机制通过将数据副本存储在内存中来加速访问,提高应用程序性能。其核心步骤包括:数据写入时存储在内存中;读取时首先检查内存,存在则直接返回,不存在则从持久化存储加载;设置过...
    99+
    2024-04-08
    redis 数据访问 持久化存储
  • Vue异步更新机制及$nextTick原理是什么
    本文小编为大家详细介绍“Vue异步更新机制及$nextTick原理是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue异步更新机制及$nextTick原理是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧...
    99+
    2023-06-30
  • Redis事务机制是什么
    这篇文章主要介绍了Redis事务机制是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。了解Redis事务机制吗?redis 通过MULTI...
    99+
    2024-04-02
  • C++异常机制是什么
    今天小编给大家分享一下C++异常机制是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. 异常处理机制介绍C++中的异常...
    99+
    2023-07-06
  • Redis的内存管理机制是什么
    Redis使用一种称为"内存驱动"的内存管理机制。该机制将所有数据存储在内存中,并通过使用LRU算法(最近最少使...
    99+
    2024-05-07
    Redis
  • redis的默认存储机制是什么
    Redis的默认存储机制是将数据存储在内存中。当Redis启动时,它会将数据加载到内存中,并在内存中进行数据的读写操作。这种存储机制...
    99+
    2023-08-30
    redis
  • PHP 异常机制的本质是什么?
    php 异常机制是一个处理程序运行时错误的机制,允许程序在遇到意外情况时受控地停止执行。在 php 中,异常是表示错误或异常的对象,在发生异常时,程序会抛出一个异常并停止执行,程序控制权...
    99+
    2024-05-09
    php 异常机制
  • Vue3组件异步更新和nextTick运行机制是什么
    这篇文章主要讲解了“Vue3组件异步更新和nextTick运行机制是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue3组件异步更新和nextTick运行机制是什么”吧!组件的异步更新...
    99+
    2023-07-06
  • redis内部运作机制是什么
    本篇内容主要讲解“redis内部运作机制是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“redis内部运作机制是什么”吧!redis 就是一个数据库,不过与传统数据库不同的是 redis 的...
    99+
    2023-06-27
  • redis集群选举机制是什么
    Redis集群的选举机制是基于Raft算法的一种实现。在Redis集群中,每个节点都有可能成为领导者(leader),而其他节点则成...
    99+
    2024-04-09
    redis
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作