为什么Redis在处理速度上如此卓越?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1270个文字,预计阅读时间需要6分钟。
直接以来Redis作为缓存中间件,大幅提升大数据量列表查询的效率。Redis是复杂、大数据量列表查询耗时、高并发访问缓慢的优化利器——上是存储的必备武器。同时,Redis为何这么快?已成为行业内的热门话题。
一直以来Redis以“快“在缓存中间件中大杀四方。Redis是复杂、大数据量列表查询耗时、高并发访问缓慢的优化手段——上缓存的必备“武器”,同时“Redis为什么这么快?”已经成为了当下程序员面试的必考题之一。
常见的答案有“Redis是基于内存操作的,没有磁盘IO当然猛”,“Redis专门设计和优化的数据结构为快速查询提供了保障”,“Redis是单线程工作,省去了上下文切换和CPU消耗,不存在锁竞争更没有死锁”,以及“Redis使用基于IO多路复用机制的线程模型所以快”。
当然,这些答案都没问题。但是为什么基于IO多路复用机制的线程模型就会快呢?在Redis工作的过程中,这种模型究竟发挥了什么作用?值得我们进一步探索。
什么是I/O多路复用机制的线程模型?
理论角度讲,I/O多路复用是一种同步 IO 模型,实现一个线程可以监视多个文件句柄。一旦某个文件句柄就绪,就能够通知应用程序进行相应的读写操作;没有文件句柄就绪时会阻塞应用程序,交出 cpu。IO 是指网络 IO,多路指多个TCP连接(即 socket 或者 channel),复用指复用一个或几个线程。
实现角度讲,I/O多路复用模型是利用 select、poll、epoll可以同时监察多个流的 I/O 事件的能力,在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有 I/O 事件时,就从阻塞态中唤醒,然后程序就会轮询一遍所有的流(epoll是只轮询那些真正发出了事件的流),并且依次顺序的处理就绪的流,这种做法就避免了大量的无用操作。
本文共计1270个文字,预计阅读时间需要6分钟。
直接以来Redis作为缓存中间件,大幅提升大数据量列表查询的效率。Redis是复杂、大数据量列表查询耗时、高并发访问缓慢的优化利器——上是存储的必备武器。同时,Redis为何这么快?已成为行业内的热门话题。
一直以来Redis以“快“在缓存中间件中大杀四方。Redis是复杂、大数据量列表查询耗时、高并发访问缓慢的优化手段——上缓存的必备“武器”,同时“Redis为什么这么快?”已经成为了当下程序员面试的必考题之一。
常见的答案有“Redis是基于内存操作的,没有磁盘IO当然猛”,“Redis专门设计和优化的数据结构为快速查询提供了保障”,“Redis是单线程工作,省去了上下文切换和CPU消耗,不存在锁竞争更没有死锁”,以及“Redis使用基于IO多路复用机制的线程模型所以快”。
当然,这些答案都没问题。但是为什么基于IO多路复用机制的线程模型就会快呢?在Redis工作的过程中,这种模型究竟发挥了什么作用?值得我们进一步探索。
什么是I/O多路复用机制的线程模型?
理论角度讲,I/O多路复用是一种同步 IO 模型,实现一个线程可以监视多个文件句柄。一旦某个文件句柄就绪,就能够通知应用程序进行相应的读写操作;没有文件句柄就绪时会阻塞应用程序,交出 cpu。IO 是指网络 IO,多路指多个TCP连接(即 socket 或者 channel),复用指复用一个或几个线程。
实现角度讲,I/O多路复用模型是利用 select、poll、epoll可以同时监察多个流的 I/O 事件的能力,在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有 I/O 事件时,就从阻塞态中唤醒,然后程序就会轮询一遍所有的流(epoll是只轮询那些真正发出了事件的流),并且依次顺序的处理就绪的流,这种做法就避免了大量的无用操作。

