redis为什么用单线程?为什么那么快?

什么是redis单线程?redis为什么用单线程?为什么单线程redis能那么快?下面本篇文章给大家分析分析,希望对大家有所帮助!

redis为什么用单线程?为什么那么快?

1.基本概念

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

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

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

持久化异步删除集群数据同步

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

2.redis为什么用单线程

多线程的开销

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

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

被多线程同时访问共享资源,比如共享的数据结构为了保证线程安全,导致性能的牺牲粗粒度的锁导致所有串行,系统的吞吐率随着线程的增加而增加

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

1.png

2.png

3.单线程的redis为什么快

redis大部分操作都在内存上+高效的数据结构redis采用多路复用机制,在网络中处理大量客户端请求,实现高吞吐率

4.socket

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

SimpleKV 为了处理一个 Get 请求需要监听客户端请求(bind/listen)和客户端(代码)建立连接(accept)从 socket 中读取请求(recv)解析客户端发送请求(parse)根据请求类型读取键值数据(get)最后给客户端返回结果,即向 socket 中写回数据(send)

潜在的阻塞点

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

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

3.png

socket的非阻塞模式保证 Redis 线程,既不会像基本 IO 模型中一直在阻塞点等待,也不会导致 Redis 无法处理实际到达的连接请求或数据Linux 中的 IO 多路复用机制

4.png

5.多路复用

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

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

具体实现

FD是多个套接字

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

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

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

首先将事件放入事件队列,无需润徐请求是否实际发生,避免CPU资源浪费根据相应的事件执行响应的操作

5.png

6.总结

redis真的是单线程吗

对网络 IO 和数据读写的操作采用了一个线程。

为什么用单线程

避免多线程开发的并发控制问题。多路复用的 IO 模型密切相关。

单线程为什么这么快

更多编程相关知识,请访问:编程视频!!

以上就是redis为什么用单线程?为什么那么快?的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2039920.html

(0)
上一篇 2025年2月24日 00:07:04
下一篇 2025年2月18日 01:14:07

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 聊聊Redis中怎么实现支持几乎所有加锁场景的分布式锁

    本篇文章给大家介绍一下redis分布式锁的实现方法,希望对大家有所帮助! Hello 大家好,今天给大家分享redisson实现的多类型锁、支持几乎所有加锁场景的redis分布式锁的实现,还支持小型MQ和redis的各种数据操作。【相关推荐…

    2025年2月24日 数据库
    200
  • 一文聊聊Redis中的epoll和文件事件

    本篇文章给大家介绍一下redis中的文件事件,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 事件驱动 Redis 服务器是事件驱动程序,分为文件事件和时间事件 文件事件:socket 的可读可写事件定时任务 【相关推荐:R…

    2025年2月24日
    200
  • 总结分享几款实用Redis可视化工具

    本篇文章总结了几款实用redis可视化工具分享给大家,希望对大家有所帮助,快来收藏吧! 不啰嗦,我们直接开始! 1、命令行 1.1、iredis 利用iredis,用|将redis通过pipe用shell的其他工具,比如jq/fx/rg/s…

    2025年2月24日 数据库
    200
  • 浅谈Redis中的字典、哈希算法和ReHash原理

    本篇文章带大家了解一下redis中的字典、哈希算法和rehash原理,希望对大家有所帮助! Redis 中的字典被广泛用于实现Redis的各种功能,其中包括数据库和哈希键。 字典的底层实现为哈希表,每个字典带有两个哈希表,一个平时使用,另一…

    2025年2月24日
    200
  • 浅析Redis缓存中的8种淘汰策略

    本篇文章带大家来聊聊redis缓存中的8种淘汰策略,看看应该怎么使用它们,希望对大家有所帮助! 我们知道Redis缓存使用内存来保存数据,但内存大小毕竟有限,随着要缓存的数据量越来越大,有限的缓存空间不可避免地会被写满。这时候就需要缓存的淘…

    2025年2月24日
    200
  • Redis怎么进行去重?4种去重方法浅析

    redis怎么进行去重?下面本篇文章给大家介绍一下redis去重的4种方法,希望对大家有所帮助! 这篇文章主要介绍了Redis实现唯一计数的3种方法分享,本文讲解了基于SET、基于 bit、基于 HyperLogLog三种方法,需要的朋友可…

    2025年2月24日
    200
  • 浅析Redis中AOF的原理和缺点

    本篇文章带大家了解一下redis持久化中的aof,介绍一下aof原理、aof缺点,希望对大家有所帮助! AOF 上文我们提到了rRedis中的一种持久化方式就是RDB 此文我们来讲另一种实现方式那就是AOF AOF是通过只记录Redis写入…

    2025年2月24日
    200
  • redis中分布式session不一致性怎么办

    分布式session不一致性怎么办?下面本篇文章给大家介绍一下redis中分布式session不一致性的解决方案,希望对大家有所帮助! 分布式session不一致性解决方案 一、Session有什么作用? Session 是客户端与服务器通…

    2025年2月24日 数据库
    200
  • Redis中什么是慢查询、订阅模式

    本篇文章给大家介绍一下redis中的慢查询和订阅模式,希望对大家有所帮助! 慢查询 慢查询日志就是系统在命令执行时每条命令的执行时间,当超过阀值,就将这条命令记录下来。【相关推荐:Redis视频教程】 Redis命令执行流程 发送命令 命令…

    2025年2月24日 数据库
    200
  • 深入了解Redis中的主从同步机制

    本篇文章带大家了解一下redis中的主从同步,介绍一下redis主从的两种结构模型、主从关系的建立、主从复制策略等,希望对大家有所帮助! 之前的文章中详细分析了redis的特性和核心原理,从本篇开始将对redis的部署结构和运行模式进行分析…

    2025年2月24日 数据库
    200

发表回复

登录后才能评论