redis和memcache的区别
- redis拥有更多的数据结构支持更多的数据操作。redis操作是在服务端进行。
- memcache需要将数据拿到客户端操作,再传输回去,增加IO次数和数据体积。
- redis中对于复杂操作比较高效。
- 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)单线程避免了线程切换和竞态产生的消耗。
网友评论