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文档。上传文档
查看更多
近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到什么是二 八定律、什么是热数据和冷数据,复杂一点的会问到缓存雪崩、缓存穿透、 缓存预热、缓存更新、缓存降级等问题,这些看似不常见的概念,都与我们的缓 存服务器相关,一般常用的缓存服务器有Redis、Memcached等,而笔者目前最常用的也只有Redis这一种。 如果你在以前面试的时候还没有遇到过面试官问你《为什么说Redis是单线程的以及Redis为什么这么快!》,那么你看到这篇文章的时候,你应该觉得是一件 很幸运的事情!如果你刚好是一位高逼格的面试官,你也可以拿这道题去面试对 面望穿秋水”般的小伙伴,测试一下他的掌握程度。 好啦!步入正题!我们先探讨一下Redis是什么,Redis为什么这么快、然后在探讨一下为什么Redis是单线程的? Redis 简介Redis是一个开源的内存中的数据结构存储系统,它可以用作:数据库、缓存和 消息中间件。 它支持多种类型的数据结构,如字符串(String),散列(Hash),列表(List),集合(Set),有序集合(Sorted Set或者是ZSet)与范围查询,Bitm叩s, 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)内存数据库的工作模式: 内存硬盘“banana” 看完上述的描述,对于一些常见的Redis相关的面试题,是否有所认识了,例如: 什么是Redis、Redis常见的数据结构类型有哪些、Redis是如何进行持久化的等。 二.Redis到底有多快? Redis采用的是基于内存的采用的是单进程单线程模型的KV数据库,由C语言编写,官方提供的数据是可以到达100000+的QPS (每秒内查询次数)。 这个数据不比采用单进程多线程的同样基于内存的KV数据库Memcached差! Requests per second 横轴是连接数,纵轴是QPS。此时,这张图反映了一个数量级,希望大家在面试 的时候可以正确的描述出来,不要问你的时候,你回答的数量级相差甚远! H.Redis为什么这么快? 1、完全基于内存,绝大局部请求是纯粹的内存操作,非常快速。数据存在内存 中,类似于HashM叩,HashMap的优势就是查找和操作的时间复杂度都是。⑴;2、数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的; 3、采用单线程,防止了不必要的上下文切换和竞争条件,也不存在多进程或者 多线程导致的切换而消耗CPU,不用去考虑各种锁的问题,不存在加锁释放锁 操作,没有因为可能出现死锁而导致的性能消耗;4、使用多路I/O复用模型,非阻塞10; 5、使用底层模型不同,它们之间底层实现方式以及与客户端之间通信的应用协议不一样,Redis直接自己构建了 VM机制,因为一般的系统调用系统函数的 话,会浪费一定的时间去移动和请求; 以上几点都比拟好理解,下边我们针对多路I/O复用模型进行简单的探讨: (1)多路I/O复用模型多路I/O复用模型是利用select、poll、epoll可以同时监察多个流的I/O事件 的能力,在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有I/O事件 时,就从阻塞态中唤醒,于是程序就会轮询一遍所有的流(epoll是只轮询那些 真正发出了事件的流),并且只依次顺序的处理就绪的流,这种做法就防止了大 量的无用操作。 这里“多路”指的是多个网络连接,复用指的是复用同一个线程。 采用多路I/O复用技术可以让单个线程高效的处理多个连接请求(尽量减少

文档评论(0)

187****8606 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:6013054242000004

1亿VIP精品文档

相关文档