您当前的位置:首页 > 电脑百科 > 数据库 > Redis

Redis为什么是单线程,高并发快由哪些因素决定?

时间:2020-03-25 18:27:06  来源:  作者:

redis的高并发和快速原因

1.Redis基于内存,内存的读写速度非常快;

2.Redis是单线程的,为上下文切换线程节省了大量时间;

3.Redis使用多路复用技术来处理并发连接。 非阻塞IO的内部实现使用epoll,以及由epoll +本身实现的简单事件框架。 epoll中的读取,写入,关闭和连接都被转换为事件,然后使用epoll的多路复用功能从不浪费任何时间在io上。

 

以下内容重点介绍单线程设计和IO多路复用核心设计快的原因。

Redis为什么是单线程,高并发快由哪些因素决定?

 

为什么Redis是单线程的?

1.官网回答

由于Redis是基于内存的操作,因此CPU并不是Redis的瓶颈。 Redis的瓶颈很可能是机器内存或网络带宽的大小。 既然单线程易于实现并且CPU不会成为瓶颈,那采用单线程解决方案是合乎逻辑的了。

2.性能指标

关于redis的性能,官方网站也有介绍,普通笔记本可以轻松地每秒处理数十万个请求。

3.详细原因

1)不需要各种锁的性能消耗

Redis的数据结构并非全都是简单的键值(Key-Value),而是有复杂的结构,如列表(list)和哈希(hash)。 这些结构可以执行细粒度的操作,例如在长列表后面添加元素并将其添加到哈希(hash)或删除对象。

这些操作可能需要非常大量的锁,从而导致同步开销显着增加。 简而言之,在单线程的情况下,不需要考虑各种锁,没有锁释放操作,也没有由于可能的死锁而导致的性能消耗。

2)单线程多进程集群方案

单线程的功能实际上非常强大,每个内核的效率也很高。 与单线程相比,多线程自然可以具有更高的性能限制。 但是,在当今的计算环境中,甚至单机多线程限制通常也无法满足。需要进一步探索的是多服务器群集方案,并且这些方案中的多线程技术仍然是不可用的。

所以单线程、多进程的集群不失为一个时髦的解决方案。

3)CPU消耗

单线程用于避免不必要的上下文切换和竞争条件,并且不存在消耗CPU的多进程或多线程切换。 但是,如果CPU成为Redis的瓶颈,或者不想让服务器的其他CPU内核闲置怎么办? 您可以考虑几个Redis进程。 Redis是一个键值(key-value)数据库,而不是关系数据库,并且数据之间没有约束。 只要客户端能够区分哪个键位于哪个Redis进程上,就可以完成了。

 

Redis单线程的优劣势

单进程单线程优势

代码更清晰,处理逻辑也更简单。 无需考虑各种锁。 没有锁定释放操作。 由于可能存在死锁,因此不会降低性能。 没有由多进程或多线程消耗的CPU引起的切换

单进程单线程弊端

无法利用多核CPU的性能,但可以通过在单台计算机上打开多个Redis实例来提高性能;

IO多路复用技术

当有多个连接时,Redis使用网络IO多路复用技术来确保系统的高吞吐量。 多路复用是指多个socket连接,而多路复用是指对线程进行多路复用。

多路复用主要有三种技术:select,poll,epoll。epoll是目前最新的也是最好的多路复用技术了。

“多路复用”是指多个网络连接,“多路复用”是指多路复用同一线程。 使用多个I / O多路复用技术可以使单个线程有效地处理多个连接请求(最大程度地减少网络IO的时间消耗),并且Redis可以非常快速地操作内存中的数据(这里的内存操作不会成为性能瓶颈),以上两个 要点使Redis具有很高的吞吐量。

Redis为什么是单线程,高并发快由哪些因素决定?

 

Redis高并发快总结

Redis为什么是单线程,高并发快由哪些因素决定?

 

1. Redis是一个纯内存数据库,通常是一个简单的存取操作, 线程占用大量时间。 时间主要集中在IO上,因此读取速度很快。

2. 谈到IO,Redis使用非阻塞IO,IO多路复用,使用单个线程轮询描述符,将数据库的开、关、读、写都转换成了事件,从而减少了线程切换上下文的切换和竞争。

3. Redis使用单线程模型来确保每个操作的原子性,并且还减少了线程上下文切换和竞争。

4. 此外,数据结构也有很大帮助。 Redis在整个过程中都使用哈希(hash)结构,该结构易于读取。还有一些特殊的数据结构,对数据存储进行了优化,例如压缩表以及压缩和存储短数据。 比如,跳表,使用有序数据结构来加快读取速度。

5.还有一点,Redis使用其自己的事件分离器,这是相对有效的。 它在内部使用非阻塞执行方法,并且具有较大的吞吐量。

 

以上是本文的全部内容,希望对大家的学习有帮助,也希望大家多多支持 php自学中心 感谢阅读!



Tags:Redis 单线程   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
Redis的高并发和快速原因1.Redis基于内存,内存的读写速度非常快;2.Redis是单线程的,为上下文切换线程节省了大量时间;3.Redis使用多路复用技术来处理并发连接。 非阻塞IO的内部...【详细内容】
2020-03-25  Tags: Redis 单线程  点击:(70)  评论:(0)  加入收藏
▌简易百科推荐
来源: my.oschina.net/xiaomu0082/blog/2990388首先说下问题现象:内网sandbox环境API持续1周出现应用卡死,所有api无响应现象刚开始当测试抱怨环境响应慢的时候 ,我们重启一下应...【详细内容】
2021-12-08  Java识堂    Tags:Redis   点击:(18)  评论:(0)  加入收藏
我不知道为什么你会选择对特定数量的“错误”(或警告)如此具体。听起来您正在寻找将要发布到 Yahoo! 的某些文章的内容。 Insider (N Foos to Blah for the BlahBlah)。那说:...【详细内容】
2021-12-07  富集云科技有限公司    Tags:Redis   点击:(14)  评论:(0)  加入收藏
目录 一、背景 二、步骤 0.理论支持 1、获取数据 2、结果 3、分析数据并评估大小 三、关于repl-backlog-size 一、背景 repl-backlog-size控制这个环形缓冲区. ​ 主从断...【详细内容】
2021-11-05  弈秋的美好生活    Tags:redis   点击:(41)  评论:(0)  加入收藏
Redis 性能测试是通过同时执行多个命令实现的。1,Redis-benchmarkRedis性能命令:redis性能命令格式: redis-benchmark [option] [option value] redis 性能测试工具可选参数如...【详细内容】
2021-11-02  川石信息    Tags:Redis   点击:(41)  评论:(0)  加入收藏
1 概述数据结构和内部编码 无传统关系型数据库的 Table 模型schema 所对应的db仅以编号区分。同一 db 内,key 作为顶层模型,它的值是扁平化的。即 db 就是key的命名空间。 key...【详细内容】
2021-11-01  JavaEdge    Tags:Redis   点击:(28)  评论:(0)  加入收藏
普通java中使用引用Java redis 驱动,即可连接:import redis.clients.jedis.Jedis; public class RedisTestJava { public static void main(String[] args) { //连...【详细内容】
2021-10-13  faesuite    Tags:Redis   点击:(34)  评论:(0)  加入收藏
Redis常用的数据结构有 string list set zset hashstringstring 是 Redis 的基本的数据类型,一个 key 对应一个 value。string 类型是二进制安全的,Redis的string可以包含任...【详细内容】
2021-10-12  语霖    Tags:Redis   点击:(36)  评论:(0)  加入收藏
列表类型可以存储一组按插入顺序排序的字符串,它非常灵活,支持在两端插入、弹出数据,可以充当栈和队列的角色。> LPUSH fruit apple(integer) 1> RPUSH fruit banana(integer)...【详细内容】
2021-09-17  深夜敲代码    Tags:Redis   点击:(54)  评论:(0)  加入收藏
Redis持久化意义 是做灾难恢复,数据恢复,也可以归类到高可用的一个环节里面去,比如你的redis整个挂了,然后redis就不可用了,你要做的事情是让redis变得可用,尽快变得可用 大量的请...【详细内容】
2021-08-12  小李说IT    Tags:Redis   点击:(77)  评论:(0)  加入收藏
当查询Redis中没有的数据时,该查询会下沉到数据库层,同时数据库层也没有该数据,当这种情况大量出现或被恶意攻击时,接口的访问全部透过Redis访问数据库,而数据库中也没有这些数据...【详细内容】
2021-07-30  随便t    Tags:缓存穿透   点击:(91)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条