为什么说Redis是单线程的以及Redis为什么这么快!.docxVIP

为什么说Redis是单线程的以及Redis为什么这么快!.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
为什么说Redis是单线程的以及Redis为什么这么快! 近乎全部与Java相关的面试都会问到缓存的问题,基础一点的会问到什么是“二八定律”、什么是“热数据和冷数据”,简单一点的会问到缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题,这些看似不常见的概念,都与我们的缓存服务器相关,一般常用的缓存服务器有Redis、Memcached等,而笔者目前最常用的也只要Redis这一种。 假如你在以前面试的时候还没有遇到过面试官问你《为什么说Redis是单线程的以及Redis为什么这么快!》,那么你看到这篇文章的时候,你应当觉得是一件很侥幸的事情!假如你刚好是一位高逼格的面试官,你也可以拿这道题去面试对面“望穿秋水”般的小伙伴,测试一下他的把握程度。 好啦!步入正题!我们先探讨一下Redis是什么,Redis为什么这么快、然后在探讨一下为什么Redis是单线程的? 二、Redis简介 Redis是一个开源的内存中的数据结构存储系统,它可以用作:数据库、缓存和消息两头件。 它支持多品种型的数据结构,如字符串(String),散列(Hash),列表(List),集合(Set),有序集合(Sorted Set或者是ZSet)与范围查询,Bitmaps,Hyperloglogs 和地理空间(Geospatial)索引半径查询。其中常见的数据结构类型有:String、List、Set、Hash、ZSet这5种。 Redis 内置了复制(Replication),LUA脚本(Lua scripting), LRU驱动大事(LRU eviction),事务(Transactions) 和不同级别的磁盘长久化(Persistence),并通过 Redis哨兵(Sentinel)和自动分区(Cluster)供应高可用性(High Availability)。 Redis也供应了长久化的选项,这些选项可以让用户将本人的数据保存到磁盘上面进行存储。依据实际情况,可以每隔肯定时间将数据集导出到磁盘(快照),或者追加到命令日志中(AOF只追加文件),他会在执行写命令时,将被执行的写命令复制到硬盘里面。您也可以关闭长久化功能,将Redis作为一个高效的网络的缓存数据功能使用。 Redis不使用表,他的数据库不会预定义或者强制去要求用户对Redis存储的不同数据进行关联。 数据库的工作模式按存储方式可分为:硬盘数据库和内存数据库。Redis 将数据储存在内存里面,读写数据的时候都不会遭到硬盘 I/O 速度的限制,所以速度极快。 (1)硬盘数据库的工作模式:? ? (2)内存数据库的工作模式:? 看完上述的描述,对于一些常见的Redis相关的面试题,能否有所生疏了,例如:什么是Redis、Redis常见的数据结构类型有哪些、Redis是如何进行长久化的等。 三、Redis到底有多快 Redis接受的是基于内存的接受的是单进程单线程模型的?KV 数据库,由C言语编写,官方供应的数据是可以达到100000+的QPS(每秒内查询次数)。这个数据不比接受单进程多线程的同样基于内存的 KV 数据库 Memcached 差!有爱好的可以参考官方的基准程序测试《How fast is Redis?》(https://redis.io/topics/benchmarks) ? 横轴是连接数,纵轴是QPS。此时,这张图反映了一个数量级,期望大家在面试的时候可以正确的描述出来,不要问你的时候,你回答的数量级相差甚远! 四、Redis为什么这么快 1、完全基于内存,绝大部分恳求是纯粹的内存操作,格外快速。数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间简单度都是O(1); 2、数据结构简约,对数据操作也简约,Redis中的数据结构是特地进行设计的; 3、接受单线程,避开了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有由于可能消灭死锁而导致的功能消耗; 4、使用多路I/O复用模型,非堵塞IO; 5、使用底层模型不同,它们之间底层实现方式以及与客户端之间通信的应用协议不一样,Redis直接本人构建了VM 机制 ,由于一般的系统调用系统函数的话,会铺张肯定的时间去移动和恳求; 以上几点都比较好理解,下边我们针对多路 I/O 复用模型进行简约的探讨: (1)多路 I/O 复用模型 多路I/O复用模型是利用 select、poll、epoll 可以同时监察多个流的 I/O 大事的力量,在空闲的时候,会把当前线程堵塞掉,当有一个或多个流有 I/O 大事时,就从堵塞态中唤醒,于是程序就会轮询一遍全部的流(epoll 是只轮询那些真正发出了大事的流),并且只依次挨次的处理就绪的流,这种

文档评论(0)

bob157641554 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档