Redis系列文章二 Redis单线程模型

1,209 阅读3分钟

Redis性能优点

首先Redis也是C语言开发的缓存数据库,不过与传统数据库不同的是 Redis 的数据是存在内存中的 ,也就是它是内存数据库,所以读写速度非常快,因此 Redis 被广泛应用于缓存方向。 官方测试50个并发执行100000个请求,读的速度110000次/s 写的速速81000次/s,高并发优秀的解决方案。

Redis解决了那些问题

  1. 缓存数据存在内存中,类似与HashMap查找和操作的时间复杂度都是O(1)
  2. 支持丰富数据类型,支持string,hash,list,set,zset
  3. 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
  4. 丰富的特性,可用于缓存,消息,计数,按key设置过期时间,过期后将会自动删除
  5. 单线程,预防多线程的竞态问题

为什么说Redis这么快

  • 完全基于内存,绝大部分请求是纯粹的内存操作,非常快速数据存储在内存中基于Hashmap,查找和操作的时间复杂度都是o(1)
  • 采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而产生的额外的CPU消耗,不用去考虑各种锁的问题,不存在加锁释放锁,不会因为死锁产生性能消耗。
  • 数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的;
  • 使用多路复用IO模型--多个网络连接复用一个线程 这里“多路”指的是多个网络连接,“复用”指的是复用同一个线程 采用多路 I/O 复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络 IO 的时间消耗),且 Redis 在内存中操作数据的速度非常快,也就是说内存内的操作不会成为影响Redis性能的瓶颈,主要由以上几点造就了 Redis 具有很高的吞吐量。

为什么说Redis是单线程的

这个问题首先要清楚我们为什么要使用多线程,多线程是为了利用电脑的多核CPU能力提高并发性,但是官方给出的单线程测试数据已经表明CPU不是Redis的瓶颈,最可能的瓶颈可能是机器的内存大小以及网络带宽。 因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了(毕竟采用多线程会有很多麻烦!)。