echo编辑整理,欢迎转载,转载请声明文章来源。欢迎添加echo微信(微信号:t2421499075)交流学习。 百战不败,依不自称常胜,百败不颓,依能奋力前行。——这才是真正的堪称强大!!!redis
Redis的实际被应用都是由于它的性能,在众多缓存中Redis也是一个比较快的中间件,并且它是单线程操做,没有过的内存开销,给程序带来了更多的扩展空间。缓存
在保证网络通畅的状况下,相同的CPU和相同的Redis版本,处理不一样大小的数据,Redis的吞吐量以下图所示,该图来自Redis的官方网站。咱们能够在网站中看到。Redis在处理1000字节的数据的时候,都是稳定位置吞吐量在10w,当处理的数据不断增大的时候,吞吐量才慢慢开始降低。
图片来自redis官网微信
下图是提供的QPS测试图,官方提供的数据是能够达到100000+的QPS(每秒内查询次数)。
图片来自redis官网网络
咱们从上面的介绍里面咱们看到了Redis是一个纯kv的操做。而且Redis绝大部分请求是纯粹的内存操做,因此速度很是快。数据存在内存中,类型与存在hashMap中,那么为何那么快呢?咱们能够一块儿来看一下几种经常使用数据结构的对比,和他们的优点。数据结构
数据结构 | 操做 | 时间复杂度 |
---|---|---|
List | insert | O(N) |
List | select | O(1) |
Set | insert | O(1) |
Set | select | O(1) |
HashMap | insert | O(1) |
HashMap | select | O(1) |
从上图咱们能够看出,HashMap的优点就是查找和操做的时间复杂度都是O(1),因此Redis内部采用这种结构可以从根本上得到足够的优点,当让,Redis的快速不只仅是数据结构成就的,还有单程成和异步I/O多线程
Redis使用单线程就够了!咱们能够看到下图中官网的描述,Redis的使用瓶颈并非CPU,它主要受到内存和网络的限制。例如,使用在通常Linux系统上运行的流水线Redis每秒能够发送一百万个请求,所以,若是您的应用程序主要使用O(N)或O(log(N))命令,则几乎不会使用过多的CPU 。
并发
从描述中咱们能够看到,Redis在使用的时候,使用单线程就已经可以获取Redis足够使用的CPU资源,主要的瓶颈在于内存。可是单线程为何可以作到这么快的速度的呢?异步
从上面官网的介绍咱们看到了,Redis的瓶颈不在线程,不在获取CPU的资源,因此若是使用多线程就会带来多余的资源占用。好比上下文切换、资源竞争、锁的操做。函数
对于I/O阻塞可能有不少人不知道,I/O操做的阻塞究竟是怎么引发的,Redis又是怎么解决的呢?性能
作一个有底线的博客主