因为redis是单线程的,所有的 *** 作都是按照顺序线性执行的,但是由于读写 *** 作是阻塞的,所以某个请求假如是阻塞的话那么整个进程都无法对其他客户端提供服务。所以就有了io多路复用
redis的io多路复用模型是基于epoll实现的,多路复用技术还有select,poll。选择epoll实现的原因就是epoll有以下优点:
1.epoll没有最大并发连接的限制,上限是最大可以打开文件的数目
2.效率更高,epoll只管活跃的连接,而与连接总数无关
3.内存使用上epoll使用了共享内存,所以内存拷贝也省略了
其实io多路复用就是通过一种机制,可以监视多个描述符,一旦某个描述符就绪,就能够通知程序进行相应的 *** 作(通过监视描述符,将对数据库的 *** 作转换成了事件,从而减少了线程切换时上下文的切换和竞争)
应用Redis实现数据的读写,同时利用队列处理器定时将数据写入mysql。同时要注意避免冲突,在redis启动时去mysql读取所有表键值存入redis中,往redis写数据时,对redis主键自增并进行读取,若mysql更新失败,则需要及时清除缓存及同步redis主键。这样处理,主要是实时读写redis,而mysql数据则通过队列异步处理,缓解mysql压力,不过这种方法应用场景主要基于高并发,而且redis的高可用集群架构相对更复杂,一般不是很推荐。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)