精华内容
下载资源
问答
  • redis单线程为什么快

    2021-01-29 15:06:32
    Redis单线程主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程。但 Redis 的其他功能,比如持久化、异步删除、集群数据同步等,其实是多线程完成的。 ...

    Redis的单线程主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程。但 Redis 的其他功能,比如持久化、异步删除、集群数据同步等,其实是多线程完成的。
    单线程可以避免多线程造成的线程开销;
    单线程的 Redis 也能获得高性能,跟多路复用的 IO 模型密切相关,因为这避免了 accept() 和 send()/recv() 潜在的网络 IO 操作阻塞点。

    展开全文
  • redis 单线程为什么快

    2021-01-04 23:56:50
    基于内存的数据库, 内存比硬盘读取太多 单线程执行命令没有线程切换的消耗 redis 基于 c 语言实现的数据结构, 数据结构简单高效
    • 基于内存的数据库, 内存比硬盘读取快太多
    • 单线程执行命令没有线程切换的消耗
    • redis 基于 c 语言实现的数据结构, 数据结构简单高效
    展开全文
  • 转载于:https://www.cnblogs.com/gogogofh/p/11283237.html

    转载于:https://www.cnblogs.com/gogogofh/p/11283237.html

    展开全文
  • 我们可能也听说了,Redis单线程的,并且在面试中也会经常被问到 “为什么单线程Redis 性能这么?”,这篇文章我们就聊聊此问题。 首先,我们需要先领清楚一个事实,我们通常说的 Redis单线程,主要是指它...

    众所周知,Redis 在内存数据库领域内,可谓是独领风骚,应用非常广泛。这主要得益于其丰富的数据类型和极高的性能。

    我们可能也听说了,Redis 是单线程的,并且在面试中也会经常被问到 “为什么单线程的 Redis 性能这么快?”,这篇文章我们就聊聊此问题。

    首先,我们需要先领清楚一个事实,我们通常说的 Redis 是单线程,主要是指它的网络请求和执行命令的流程是单线处理的, 而整个 Redis Server 是多线程的 。比如持久化、lazyfree、集群数据同步等都是额外的线程处理的。

    所以,严格来说,Redis 并不是单线程,但是我们一般把 Redis 称为单线程高性能。接下来,我也会把 Redis 称为单线程模式。而且,这也会促使你紧接着提问:“为什么用单线程?为什么单线程能这么快?”

    为什么使用单线程

    官方FAQ表示,因为 Redis 是基于内存的操作,CPU 不是 Redis 的瓶颈,Redis 的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且 CPU 不会成为瓶颈,那就顺理成章地采用单线程的方案了。

    本想着会有很高大上的技术,没想到就是一句官方看似糊弄我们的回答!但是,我们已经可以很清楚的解释了为什么Redis这么快,并且正是由于在单线程模式的情况下已经很快了,就没有必要在使用多线程了!

    基于内存的操作

    Redis 是一个 Key-value 内存数据库,它内部构是一个哈希表,根据指定的 Key 访问时,计算出 Key 的 hash 值后,只需要 O(1) 的时间复杂度就可以快速的定位到对应的数据。同时,Redis 提供了丰富的数据类型,并且其底层也是用了高效的 哈希表、跳表等高性能的数据结构,同时也使用高效的操作方式进行操作,这些操作都在内存中进行,并不会大量消耗 CPU 资源,所以速度极快。

    IO多路复用技术

    Linux 中的 IO 多路复用机制是指一个线程处理多个 IO 流,也就是 我们经常听到的 select / epoll 机制。Redis 网络框架调用 epoll 机制,让内核监听这些套接字。此时,Redis 线程不会阻塞在某一个特定的监听或已连接套接字上,也就是说,不会阻塞在某一个特定的客户端请求处理上。正因为此,Redis 可以同时和多个客户端连接并处理请求,从而提升并发性。

    同时,Redis 利用了 IO 多路复用技术的事件驱动模型,这样,Redis 无需一直轮询是否有请求实际发生,这就可以避免造成 CPU 资源浪费。同时,Redis 在对事件队列中的事件进行处理时,会调用相应的处理函数,这就实现了基于事件的回调。因为 Redis 一直在对事件队列进行处理,所以能及时响应客户端请求,提升 Redis 的响应性能。

    单线程的优点

    基于以上特性,Redis采用单线程已足够达到非常高的性能,所以 Redis 没有采用多线程模型。

    另外,单线程模型还带了以下好处:

    • 代码更清晰,处理逻辑更简单
    • 不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗
    • 不存在多进程或者多线程导致的切换而导致的消耗

    所以Redis正是基于以上这些方面,所以采用了单线程模型来完成请求处理的工作。

    单线程的缺点

    • 如果某个请求是比较耗时的操作,那么整个Redis就会阻塞住,其他请求也无法进来,直到这个耗时久的操作处理完成并返回,其他请求才能被处理到。

    • 无法发挥多核 CPU 性能,不过可以通过在单机开多个Redis实例来完善

    多线程优化

    • Redis4.0 之后,Redis引入了lazyfree的机制,提供了unlinkflushall ayscflushdb async等命令和lazyfree-lazy-evictionlazyfree-lazy-expire等机制来异步释放内存,它主要是为了解决在释放大内存数据导致整个redis阻塞的性能问题。
    • Redis 6.0 又引入了多线程来完成请求数据的协议解析,进一步提升性能。它主要是解决高并发场景下,单线程解析请求数据协议带来的压力。请求数据的协议解析由多线程完成之后,后面的请求处理阶段依旧还是单线程排队处理。

    总结

    1. Redis是纯内存数据库,一般都是简单的存取操作,所有读写速度都很快

    2. 再说一下 IO,Redis使用的是非阻塞IO,IO多路复用。

    3. Redis采用了单线程的模型,保证了每个操作的原子性,也减少了线程的上下文切换和竞争。

    4. 另外,数据结构也帮了不少忙,Redis全程使用 hash 结构,读取速度快,还有一些特殊的数据结构,对数据存储进行了优化,如压缩表,对短数据进行压缩存储,再如,跳表,使用有序的数据结构加快读取的速度。

    5. 还有一点,Redis采用自己实现的事件分离器,效率比较高,内部采用非阻塞的执行方式,吞吐能力比较大。

    展开全文
  • 所谓redis很快,到底是指的什么? 响应时长很短 ...总结redis单线程比较的原因: 1) 使用IO多路复用,例如epoll (提升吞吐量) 2) 纯内存操作 (处理请求耗时短,单位时间内处理的请求数...
  • **1.**redis为什么那么 因为redis的所有数据都是在内存中的,所有的运算都是内存级别的运算,而且单线程...**2.**Redis单线程为什么还能处理那么多的并发客户端连接? Redis使用epoll(event poll)来实现IO多路复...
  • Redis单线程为什么快? 1.redis是基于内存操作,性能瓶颈不在cpu,而是再内存和网络带宽。 2.redis单线程省去了多线程上下文切换线程的时间。 3.redis使用多路复用技术,可以处理并发的连接。(非阻塞io即NIO) 简单...
  • 简单来说:redis是分布式高性能的key-value的内存数据库,采用单线程设计,多路复用I/O。 基于内存的键值对存储,时间复杂度o(1),速度。 基于单线程设计: (1)没有创建线程、销毁线程带来的消耗 (2)避免...
  • 1、完全基于内存,绝大部分请求是纯粹的...3、采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现...
  • 2、那为什么有多线程:硬盘存取时间远远大于内存。当cpu在等待硬盘的时候,它可以先去做别的事情,比如等硬盘要一个小时,保存现场需要十五分钟, 那就还有剩下的四十五分钟可以利用,不用cpu一直在等硬盘。 3、...
  • redis单线程为什么的个人解释

    千次阅读 2019-05-30 00:18:06
    面试官再问,单线程为什么呢?不应该是多线程才更吗?那这是不是有什么矛盾啊? 答:啊???。。。。。。(心里卧槽,就是单线程所以啊,还说多线程什么事,难道是我哪块的知识点出了问题了?) 对,这是...
  • 2020-08-12:Redis单线程为什么这么?前言为什么单线程的Redis这么 前言 每日一题专栏 为什么单线程的Redis这么 一、 redis采用了纯内存的操作进行处理数据 二、 redis是单线程操作,避免了频繁切换上下文的...
  • 1.redis单线程的吗 redis执行命令是单线程的 2.为什么单线程性能还很高 1.使用内存 2.IO多路复用 1.连接服务器 10000个 2.接受命令存储命令 3.执行器读取命令 4.执行命令
  • 写这篇Redis单线程为什么快,Redis6.x已经发布快一年了,但是绝大公司还是在使用Redis5.x版本,因为Redis5.x已经足够给中小型企业提供支持了,甚至有些大型公司还在使用单线程Redis。 Redis的单线程为什么快?Redis真...
  • Redis单线程为什么这么? 答: (一)纯内存操作 (二)单线程操作,避免了频繁的上下文切换 (三)采用了非阻塞I/O多路复用机制 (四)RESP协议简单 ...
  • 核心:redis是将所有的数据全部放在内存中的,所以说使用单线程去操作效率就是最高的,多线程(CPU上下文回切换:耗时的操作!);对于内存系统来说,如果没有上下文切换效率就是最高的!多次读写都是在一个CPU上的...
  • 但我们也听说了,Redis单线程的,为什么采用单线程Redis也会如此之呢?这篇文章我们来分析一下其中的缘由。 其实,严格来说,Redis Server是多线程的,只是它的请求处理整个流程是单线程处理的。这一点我们...
  • 在本篇文章中小编给大家整理了关于redis单线程为什么快的原因和具体实例,有兴趣的朋友们可以参考下。
  • 1)纯内存操作 后续数据折处理,是完全在内存中执行。 2)核心是基于非阻塞的IO多路复用机制 redis连接形成的一个个sockect请求,是放在IO多路复用程序中...3)单线程反而避免了多线程的频繁上下文切换问题 ...
  • redis单线程架构 redis客户端与服务端请求方式 redis的客户端与服务器端的模型简化,每次客户端调用都经历:发送命令,执行命令,返回结果 ...为什么单线程处理那么 (1)纯内存访问,redis的所有数据都...
  • 1.采用内存存储数据,相比磁盘存储很多 2.非堵塞io多路复用。 多路:多个网络连接 复用:公用一个线程 3.单线程操作,避免了不必要的上下文切换和竞争条件 ...
  • (二)单线程操作,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗; (三)采用了非阻塞I/...
  • 1、纯内存(主要原因) 2、非阻塞IO 3、避免线程消耗和竞争
  • 1.redis是存储在内存上的,读写的话不会受到硬盘 I/O 速度的限制 如图: (1).... ...(2)....3.多路IO复用模型,非阻塞IO ...4.采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而...
  • 1、redis是基于内存来存储的,然而内存的读取/响应市场大约100纳秒,这一点也就是redis能打到每秒万级的重要基础...3、单线程避免了线程切换和竟态产生的消耗。 单线程带来的好处及问题 单线程带来的好处: 1、单...
  • 为什么单线程了还能这么呢 纯内存访问,Redis 是纯内存访问的,内存访问的响应时间大约是 100 纳秒,这是Redis 每秒万级访问的基础 非阻塞 IO Redis 使用 epoll 作为 IO 多路复用技术的实现,再加上 Redis 自己的...
  • 点击蓝色“架构文摘”关注我哟加个“星标”,每天上午 09:25,干货推送!来源:http://kaito-kidd.com/2020/06/28/why-redis-so-fast/众所...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,319
精华内容 527
关键字:

redis单线程为什么快

redis 订阅