redis是单线程的,那么他是怎么样避免阻塞的

这篇具有很好参考价值的文章主要介绍了redis是单线程的,那么他是怎么样避免阻塞的。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Redis 实例有哪些阻塞点?

Redis 实例在运行时,要和许多对象进行交互,这些不同的交互就会涉及不同的操作,下
面我们来看看和 Redis 实例交互的对象,以及交互时会发生的操作。

客户端:网络 IO,键值对增删改查操作,数据库操作;
磁盘:生成 RDB 快照,记录 AOF 日志,AOF 日志重写;
主从节点:主库生成、传输 RDB 文件,从库接收 RDB 文件、清空数据库、加载 RDB
文件;
切片集群实例:向其他实例传输哈希槽信息,数据迁移。

1. 和客户端交互时的阻塞点

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

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

Redis 中涉及集合的操作复杂度通常为 O(N)

例如集合元素全量查询操作 HGETALL、SMEMBERS,以及集合的聚合统计操作,例如求交、并和差集。这些操作可以作为 Redis 的第一个阻塞点:集合全量查询和聚合操作

集合自身的删除操作同样也有潜在的阻塞风险。你可能会认为,删除操作很简
单,直接把数据删除就好了,为什么还会阻塞主线程呢?

删除操作的本质是要释放键值对占用的内存空间。

应用程序释放内存时,操作系统会将释放的这块内存插入一个空闲内存块的链表,以便后续进行管理和再分配。而大量释放就会就会增加开销,然后阻塞这个地方

当删除了一个bigkey(也就是包含有大量元素的的时候)会有这种问题

bigkey 删除操作就是 Redis 的第二个阻塞点。

由此引出的第三个阻塞点清空数据库。

2. 和磁盘交互时的阻塞点

磁盘 IO 一般都是比较费时费。

然后呢redis 就有了这个aof 和这个 rdb 持久化机制。这两个持久化机制里面呢,就会引出第四个阻塞点AOF 日志同步写(一般说的时always)

3. 主从节点交互时的阻塞点

在主从集群中,主库需要生成 RDB 文件,并传输给从库。主库在复制的过程中,创建和传
输 RDB 文件都是由子进程来完成的,不会阻塞主线程。但是,对于从库来说,它在接收了
RDB 文件后,需要使用 FLUSHDB 命令清空当前数据库,这就正好撞上了刚才我们分析的
第三个阻塞点

从库在清空当前数据库后,还需要把 RDB 文件加载到内存,这个过程的快慢和
RDB 文件的大小密切相关,RDB 文件越大,加载过程越慢,所以,加载 RDB 文件就成为
了 Redis 的第五个阻塞点。

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

这个点我只了解了一点,不要有bigkey

总结以上的堵塞点

集合全量查询和聚合操作;
bigkey 删除;
清空数据库;
AOF 日志同步写;
从库加载 RDB 文件

为了避免阻塞式操作,Redis 提供了异步线程机制。所谓的异步线程机制,就是指,Redis 会启动一些子线程,然后把一些任务交给这些子线程,让它们在后台完成,而不再由主线程来执行这
些任务。使用异步线程机制执行操作,可以避免阻塞主线程。

哪些阻塞点可以异步执行?

能被异步子线程执行的都不是关键路径上的操作

关键路径上的操作简单来说客户端把请求发送给 Redis 后,等着 Redis
返回数据结果的操作。

对于 Redis 来说,读操作是典型的关键路径操作,因为客户端发送了读操作之后,就会等
待读取的数据返回,以便进行后续的数据处理。

Redis 的第一个阻塞点“集合全量查询和聚合操作”都涉及到了读操作,所以,它们是不能进行异步操作

删除操作并不需要给客户端返回具体的数据结果,所以不算是关
键路径操作。而我们刚才总结的第二个阻塞点“bigkey 删除”,和第三个阻塞点“清空数
据库”,都是对数据做删除,并不在关键路径上。因此,我们可以使用后台子线程来异步
执行删除操作。

第四个阻塞点aof也不是,他不需要给用户返回结果

所以他也是异步的

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

不能用异步解决的就是集合全量查询和聚合操作”和“从库加载 RDB 文
件”。

那么异步又是怎么实现的呢

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

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


但实际上,这个时候删除还没有执行,等到后台子线程从任务队列中读取任务后,才开始
实际删除键值对,并释放相应的内存空间。因此,我们把这种异步删除也称为惰性删除
(lazy free)。此时,删除或清空操作不会阻塞主线程,这就避免了对主线程的性能影
响。

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

redis是单线程的,那么他是怎么样避免阻塞的,redis,redis,数据库,缓存

 文章来源地址https://www.toymoban.com/news/detail-641449.html

到了这里,关于redis是单线程的,那么他是怎么样避免阻塞的的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 谷歌的Bard怎么样?

    Bard是什么? ChatGPT: Bard可以指以下几种事物: Bard是一个英雄联盟(League of Legends)游戏中的角色名称,他是一个能够进行攻击和治疗的辅助英雄。 Bard是指中世纪欧洲的一类文学艺术家,主要从事吟游诗人的活动,通过口头传统的方式来讲述历史故事和传说。 Bard是指一种用

    2024年02月10日
    浏览(30)
  • 成都北大青鸟怎么样?

    对于任何一个培训机构的了解大概的流程是:听说名字——网上搜索,可以看到机构官网,也会看到机构广告,当然也会看到各种有好有坏的评论,到这里会对机构形成初印象;然后如果身边有培训出身的小伙伴会去询问对机构有没有了解等等。 然后就开始考虑线下实地考察

    2023年04月08日
    浏览(32)
  • 现在学习python怎么样

    Python,年龄可能比很多读者都要大,但是它在更新快速的编程界却一直表现出色,甚至有人把它比作是编程界的《葵花宝典》,只是Python的速成之法相较《葵花宝典》有过之而无不及。 Python简洁,高效的特点,大大提升了程序员的编码速度,极大的提高了程序员的办公效率,

    2023年04月13日
    浏览(38)
  • 校园跑腿小程序怎么样?

    随着社会的发展和人们生活水平的提高,高等教育越来越受到重视。大学校园不仅是学习的地方,也是学生们日常生活的场所。然而,在繁忙的学业和生活压力下,学生可能经常面临诸如代购、快递、取餐等各种琐碎但繁琐的任务。基于这个需求,校园跑腿小程序应运而生。

    2024年02月16日
    浏览(41)
  • 怎么样设计短链接系统?

    短链接是什么? 短链接,顾名思义就是短的链接,能将很长的链接转化为短链接,并且能由短链接指向原来长链接所指向的地方。 为什么需要短链接? 在很多地方,比如微博、推特限制了每一条博文内容长度,那么如果链接太长可能就无法发出去了。 生成的二维码也更加容

    2024年02月11日
    浏览(36)
  • 电脑恢复出厂设置会怎么样

    电脑恢复出厂设置会怎么样大家知道吗?在这里小编我想告诉你的是,如果您想把当前的电脑系统重置,那么您电脑桌面以及 C 盘里的资料就会被成功删除掉了.今天来看看电脑恢复出厂设置会怎么样以及电脑恢复出厂设置的方法的介绍。 工具/原料: 系统版本:Windows10系统 品牌

    2024年02月13日
    浏览(34)
  • node怎么样安装npm

    怎么样安装npm? 1、官网下载: https://nodejs.org/en/download/ 2、安装完成后CMD命令窗口输入“node -v”或“node --version”命令 出现版本信息: 3、npm默认的仓库地址是在国外网站,速度较慢,建议大家设置到淘宝镜像。但是切换镜像是比较麻烦的。 4、推荐一款切换镜像的工具:n

    2024年02月04日
    浏览(36)
  • 网络安全就业形势怎么样?

    泻药,以下都是我本人的肺腑之言,是答主深耕职场多年,转战数家公司+总结周围朋友的从业经验才总结出来的行业真相,真心希望帮助到还没有步入职场的大家,尤其是24届的应届毕业生,多掌握些就业信息就能少走一些弯路,互联网公司、央国企、公务员……哪个赛道不

    2024年02月07日
    浏览(30)
  • 小发猫降aigc怎么样?

    AIGC检测上升,新一代软件助力降低AI生成论文的识别率,下面分享小发猫降aigc怎么样? 随着科技的不断进步,人工智能(AI)在学术界的运用日益广泛,AI生成的论文数量呈现上升趋势。然而,这也导致了AIGC(人工智能生成内容检测)的识别率不断攀升,引起了学术界的广泛

    2024年03月15日
    浏览(76)
  • 百度文心一言怎么样?

    文心一言在3月16号发布,刚发布时只有邀请码体验,没有申请体验通道。到了晚上看到申请体验通道,便提交了申请,到4月1号过了半个月终于收到短信可以体验了。   本来想看看接口,也没什么恶意,但是却遭到了拒绝,感觉是小心翼翼,生怕泄露了什么。 另外,满屏的

    2023年04月08日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包