Redis使用单线程,可以避免上下文切换,效率最高。避免了线程切换、加锁等资源消耗
单线程指的是网络请求模块使用了一个线程(所以不需考虑并发安全性),即一个线程处理所有网络请求,其他模块仍用了多个线程。
IO多路复用指多个channel或者网络IO,共用一个或者少量线程来处理。
为什么使用多路复用,是因为与用户网络传输是需要等待的,IO操作不能直接返回。所以使用IO多路复用来解决这个问题,防止一个IO阻塞影响其他IO的读取。
文件事件处理器使用IO多路复用模块同时监听多个FD(文件描述符),有读写accept和close事件时,回调绑定的事件处理器。
使用epoll策略,实现哪些socket有通讯,处理那些socket、 高效
使用redis的好处:
- 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)
- 支持丰富数据类型,支持string,list,set,sorted set,hash
- 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
- 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
redis的value最大可以达到1GB,key最大是512M
Redis常见性能问题和解决方案:
1、一般不在master上做持久化工作,因为写内存快照时,会阻塞主线程工作,可能导致间歇性暂停服务。
2、主从复制使用单向链表结构,更稳定。