温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

redis为什么用单线程

发布时间:2021-11-01 10:50:15 来源:亿速云 阅读:181 作者:iii 栏目:关系型数据库

本篇内容主要讲解“redis为什么用单线程”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“redis为什么用单线程”吧!

1.基本概念

  • 什么是redis的单线程(核心功能在单线程上,并不是所有功能)

    • 持久化

    • 异步删除

    • 集群数据同步

    • redis的网络IO和键值对读写是由一个线程完成的(redis的核心服务)

    • redis的其他功能由额外线程完成

【相关推荐:Redis视频教程】

2.redis为什么用单线程

  • 多线程的开销

    • 被多线程同时访问共享资源,比如共享的数据结构

    • 为了保证线程安全,导致性能的牺牲

    • 粗粒度的锁导致所有串行,系统的吞吐率随着线程的增加而增加

    • 使用多线程可以增加系统吞吐率(每个请求),增加系统扩展性

    • 无限的增加线程数,导致吞吐量下降

  • 因此为了节省并发资源的管理,redis使用单线程,保证所有操作串行化

redis为什么用单线程

redis为什么用单线程

3.单线程的redis为什么快

  • redis大部分操作都在内存上+高效的数据结构

  • redis采用多路复用机制,在网络中处理大量客户端请求,实现高吞吐率

4.socket

  • socket通信过程(网络IO处理+键值对读写+网络IO处理)

    • SimpleKV 为了处理一个 Get 请求

    • 需要监听客户端请求(bind/listen)

    • 和客户端(代码)建立连接(accept)

    • 从 socket 中读取请求(recv)

    • 解析客户端发送请求(parse)

    • 根据请求类型读取键值数据(get)

    • 最后给客户端返回结果,即向 socket 中写回数据(send)

  • 潜在的阻塞点

    • accept() 未能成功建立连接时,会一直阻塞\

    • recv() 从客户端读取数据时,会一直阻塞\

redis为什么用单线程

  • socket的非阻塞模式

  • 保证 Redis 线程,既不会像基本 IO 模型中一直在阻塞点等待,也不会导致 Redis 无法处理实际到达的连接请求或数据

  • Linux 中的 IO 多路复用机制

redis为什么用单线程

5.多路复用

  • Linux中的IO多路复用机制指一个线程处理多个IO流,select/poll

  • 在单线程下,同时存在监听多个套接字和已连接套接字

  • 具体实现

    • 首先将事件放入事件队列,无需润徐请求是否实际发生,避免CPU资源浪费

    • 根据相应的事件执行响应的操作

    • FD是多个套接字

    • Redis使用epoll机制,让内核监听套接字

    • Redis可以和多个客户端连接并处理请求,从而提升并发性

    • select/epoll提供了基于事件的回调机制,针对不同的事件调用对应的处理函数

redis为什么用单线程

到此,相信大家对“redis为什么用单线程”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI