redis 2.8.21/3.0.2 发布
Memcached/Redis/SSDB网络IO模型对比: Memcached是多线程非阻塞IO复用的网络模型,分为监听主线程和worker子线程,监听线程监听网络连接,接受请求后,将连接描述字pipe传递给worker线程,进行读写IO,
网络层使用libevent封装的事件库,多线程模型可以发挥多核作用,但是引入了cache coherency和锁的问题,
比如,Memcached最常用的stats命令,实际Memcached所有操作都要对这个全局变量加锁,进行计数等工作,带来了性能损耗.
Redis使用单线程的IO复用模型,自己封装了一个简单的aeEvent事件处理框架,主要实现了epoll/kqueue/select,
对于单纯只有IO操作来说,单线程可以将速度优势发挥到最大,但是Redis也提供了一些简单的计算功能,比如排序/聚合等,
对于这些操作,单线程模型实际会严重影响整体吞吐量,CPU计算过程中,整个IO调度都是被阻塞住的.
Memcached(libevent):多线程,epoll事件驱动.
Redis(aeEvent):单线程,epoll事件驱动.
SSDB(LevelDB引擎,epoll网络):多线程,epoll事件驱动.
SSDB新版本采用了多线程模型,避免写操作阻塞读操作:
1个主线程,负责网络IO.
10个读线程,负责像scan复杂操作读.
1个写线程,负责写操作磁盘IO.
1个leveldb的compact线程.
也就是set写操作时,一个主线程负责网络,一个写线程负责leveldb操作;而get读操作时只有主线程在工作.
页:
[1]