redis缓存重要特性单线程模型

redis和memcache的区别

  1. redis拥有更多的数据结构支持更多的数据操作。redis操作是在服务端进行。
  2. memcache需要将数据拿到客户端操作,再传输回去,增加IO次数和数据体积。
  3. redis中对于复杂操作比较高效。
  4. redis支持cluster模式,memcached没有原生的集群模型,需要客户端往集群中分片写数据。

redis的单线程模式

首先为什么说采用单线程模型,有人说是由于多线程竞争所以单线程更快???

多线程绝大数肯定比单线程快,不采用多线程不是说单线程比较块,而是单线程实现起来简单。其次由于redis是基于内存的,cpu不是瓶颈,内存才是瓶颈,所以采用单线程就可以了,同时也简化了数据结构和算法实现。

简要说下redis单线程模型。

Redis客户端对服务端的每次调用都经历了发送命令,执行命令,返回结果三个过程。

所有的客户端对服务端请求socket连接,服务端都会专门建立一个socket与其连接。

IO多路复用程序是单线程的轮训监控所有的socket,但是IO多路复用程序,只负责监控socket接受命令所行成的AE_READABLE,IO多路复用是基于非阻塞机制的,所以拿到的命令不直接执行。

将其加入一个队列中,然后逐个被执行。并且多个客户端发送的命令的执行顺序是不确定的。执行的时候是基于内存的单线程执行。

但是可以确定的是不会有两条命令被同时执行,不会产生并发问题,这就是Redis的单线程基本模型。

redis.png

为什么redis单线程也可以做到每秒万级别处理能力

(1)纯内存访问。数据存放在内存中,内存的响应时间大约是100纳秒,这是Redis每秒万亿级别访问的重要基础。

(2)非阻塞I/O,Redis采用epoll做为I/O多路复用技术的实现,再加上Redis自身的事件处理模型将epoll中的连接,读写,关闭都转换为了时间,不在I/O上浪费过多的时间。

(3)单线程避免了线程切换和竞态产生的消耗。

你可能感兴趣的:(redis缓存重要特性单线程模型)