Redis的单线程任务:
redis的单线程指的是 redis的网络IO和键值对的读写是由一个现成来完成的,这也是redis对外提供服务的主流程。但是redis的其他功能,比如持久化,异步删除,集群数据同步等都是由额外的线程来完成的。
Redis为什么用单线程
在我们采用多线程的情况下,如果没有良好的系统设计,得到的效果其实并不好。
在redis的场景下,会存在共享同一个数据结构的场景,当多个线程共享同一个数据结构的时候,为了保证共享资源的正确性,就需要额外的机制来保障,这个额外的机制就会带来额外的开销。
并发控制的话,如果没有精细的设计,而只是加一个粗力度的排斥锁,那么大部分的请求也不会被阻塞住。而且也会降低系统易调试性和可维护性。
单线程的redis为什么这么快
理论上来说单线程的处理能力要比多线程差很多,但是redis单线程却能够保证每秒10w次的请求,主要有两个原因
- redis的大部分操作都是在内存中来完成的。
- redis中的数据采用了高效的数据结构 例如hash 跳表。
- redis采用了多路复用机制,能够在网络IO操作中并发处理大量请求操作。