问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

redis是个单线程的程序,为什么会这么快呢?每秒10000

发布网友 发布时间:2022-05-03 06:13

我来回答

2个回答

懂视网 时间:2022-05-03 19:03

下面由Redis教程栏目给大家介绍Redis是单线程的原因及高并发快的3大原因详解,希望对需要的朋友有所帮助!

Redis的高并发和快速原因

1.redis是基于内存的,内存的读写速度非常快;
2.redis是单线程的,省去了很多上下文切换线程的时间;
3.redis使用多路复用技术,可以处理并发的连接。非阻塞IO 内部实现采用epoll,采用了epoll+自己实现的简单的事件框架。epoll中的读、写、关闭、连接都转化成了事件,然后利用epoll的多路复用特性,绝不在io上浪费一点时间。

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

为什么Redis是单线程的

1.官方答案
因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了。
2.性能指标
关于redis的性能,官方网站也有,普通笔记本轻松处理每秒几十万的请求。
3.详细原因
1)不需要各种锁的性能消耗
Redis的数据结构并不全是简单的Key-Value,还有list,hash等复杂的结构,这些结构有可能会进行很细粒度的操作,比如在很长的列表后面添加一个元素,在hash当中添加或者删除
一个对象。这些操作可能就需要加非常多的锁,导致的结果是同步开销大大增加。
总之,在单线程的情况下,就不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗。
2)单线程多进程集群方案
单线程的威力实际上非常强大,每核心效率也非常高,多线程自然是可以比单线程有更高的性能上限,但是在今天的计算环境中,即使是单机多线程的上限也往往不能满足需要了,需要进一步摸索的是多服务器集群化的方案,这些方案中多线程的技术照样是用不上的。
所以单线程、多进程的集群不失为一个时髦的解决方案。
3)CPU消耗
采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU。
但是如果CPU成为Redis瓶颈,或者不想让服务器其他CUP核闲置,那怎么办?
可以考虑多起几个Redis进程,Redis是key-value数据库,不是关系数据库,数据之间没有约束。只要客户端分清哪些key放在哪个Redis进程上就可以了。

Redis单线程的优劣势

单进程单线程优势
代码更清晰,处理逻辑更简单
不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗
不存在多进程或者多线程导致的切换而消耗CPU
单进程单线程弊端
无法发挥多核CPU性能,不过可以通过在单机开多个Redis实例来完善;
IO多路复用技术
redis 采用网络IO多路复用技术来保证在多连接的时候, 系统的高吞吐量。
多路-指的是多个socket连接,复用-指的是复用一个线程。多路复用主要有三种技术:select,poll,epoll。epoll是最新的也是目前最好的多路复用技术。
这里“多路”指的是多个网络连接,“复用”指的是复用同一个线程。采用多路 I/O 复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络IO的时间消耗),且Redis在内存中操作数据的速度非常快(内存内的操作不会成为这里的性能瓶颈),主要以上两点造就了Redis具有很高的吞吐量。

Redis高并发快总结

  1. Redis是纯内存数据库,一般都是简单的存取操作,线程占用的时间很多,时间的花费主要集中在IO上,所以读取速度快。
  2. 再说一下IO,Redis使用的是非阻塞IO,IO多路复用,使用了单线程来轮询描述符,将数据库的开、关、读、写都转换成了事件,减少了线程切换时上下文的切换和竞争。
  3. Redis采用了单线程的模型,保证了每个操作的原子性,也减少了线程的上下文切换和竞争。
  4. 另外,数据结构也帮了不少忙,Redis全程使用hash结构,读取速度快,还有一些特殊的数据结构,对数据存储进行了优化,如压缩表,对短数据进行压缩存储,再如,跳表,使用有序的数据结构加快读取的速度。
  5. 还有一点,Redis采用自己实现的事件分离器,效率比较高,内部采用非阻塞的执行方式,吞吐能力比较大。

热心网友 时间:2022-05-03 16:11

MongoDB不多说,不是一个类型的东西,Redis相对Memcached来说功能和特性上的优势已经很明显了。而对于性能,Redis作者的说法是平均到单个核上的性能,在单条数据不大的情况下Redis更好。为什么这么说呢,理由就是Redis是单线程运行的。
因为是单线程运行,所以和Memcached的多线程相比,整体性能肯定会偏低。
因为是单线程运行,所以IO是串行化的,网络IO和内存IO,因此当单条数据太大时,由于需要等待一个命令的所有IO完成才能进行后续的命令,所以性能会受影响。

而就内存使用上来说,目前Redis结合了tcmalloc和jemalloc两个内存分配器,基本上和Memcached不相伯仲。如果是简单且有规律的key value存储,那么用Redis的hash结构来做,内存使用上会惊人的变小,优势是很明显的。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么会甲状腺肿大 大学生去晋城富士康能学习到东西吗?我说的是技术上的?请往届的菁干班... 富士康(晋城)科技工业园怎么样,我是应届本科生,想应聘这个,有没有知... 郭庆林人物简介 河北大学学报(自然科学版)版杂志征稿信息 河北大学学报(自然科学版)杂志投稿信息 河北大学学报自然科学版 红警任务包 开机按Delete会出现的菜单,但是现在我开机不按Delete也出现怎么回事?要... 胃镜当时能出结果吗 不喜欢了为什么不提分手 梦见我姐带了好多红暑这些到我家来 明明不喜欢我却又不肯分手 Java poi读取doc文档出错 男朋友说不喜欢你又不分手 该怎么办? 男朋友不喜欢我了又不分手? 明明没有那么喜欢却拖着不分手是什么心态 一个不喜欢自己的人但也不分手是什么意思 redis为什么高性能 redis性能为什么高 不喜欢现在的对象,又不想分手,怎么办? 梦见三条蛇其中一个是黄金蟒蛇还梦见蛇蜕皮 梦见一条黄金蛇在河边退皮。我不敢打扰离开。却又发现蛇在我手里。回到家觉得蛇在我床上。 想把大蒜敲成蒜泥却没有捣蒜机,应该用什么方法快速做出蒜泥呢? 尼古拉斯 凯奇 跪求一首英文歌叫什么名字~! 鲍勃·迪伦的歌 Mr.Tambourine Man 歌词怎样翻译比较好 Moonlight shadow这首歌所要表达的内涵和感情是什么? (moonlight shadow)这首歌的中文歌词 舞动精灵乐团的 歌曲 moonlight shadow 中文意思? 男人明明不爱了,为什么不分手? 请教:如何用JAVA POI 向Word文档里插图片 请提供下代码 谢谢!!! java poi操作xlsx文件,如何在原xlsx上进行某一行的复制到当前xlsx的新增行,内容和样式和原行保持不变 头皮有毛囊炎,经常发痒,虽然也经常洗头,但是效果不好,我想问用醋洗头会不会好点? 头皮痒死了怎么办可以用醋洗吗? 如何在没带银行卡的情况下在ATM机上取钱 儿童科幻画的如何指导 不用银行卡用本本取钱可以吗 不使用银行卡是否能取钱?取钱时都是整数,为什么会出现零头? 立邦漆含甲醛吗,我家装修用立邦漆没味道的 不用卡,怎么用农业银行卡取钱 立邦漆甲醛含量高吗 立邦乳胶漆含甲醛吗 360综合评估未通过其他平台哪个能行 谁了解大车增驾A1需要满足什么条件? 墙壁补刷了一点立邦漆会有甲醛吗? 立邦漆有没有甲醛 立邦漆有甲醛吗 手机上网又卡又慢,而且上一会儿就发烫是什么原因。 立邦漆有甲醛吗?需要通风多久? 立邦乳胶漆含不含甲醛