resid要处理命令,则redis必须完整地接收客户端的请求,并将命令解析出来,再将结果读出来,通过网络回写到客户端。整个工序分为以下几个部分:
异步的效率更高,要实现高并发必须要异步,因为同步有太多时间浪费在等待上了,遇到网络不好的客户端直接就被拖垮。异步的策略简单可总结如下:
异步没有零散的等待,但有个问题是,如果redis不一直阻塞等命令来,咋个知道“网络包有数据了”、“下次能给时”这两个时机? 如果一直去轮训问肯定效率很低,要有个高效的机制,来通知redis这两个时刻,由这些时刻来触发动作。 这就是事件驱动。
一个tcp包来了、有数据可以写给客户端 这两个时机都是事件。与之对应的就是redis和客户端之间socket的可读、可写事件[1] ,就像微信聊天中新消息提醒一样。 linux中的epoll就是干这个事的,redis基于epoll等机制抽象出了一套事件驱动框架[2],整个server完全由事件驱动,有事件发生就处理,没有就空闲等待。
redis6多线程主要解决 socket 可读可写的网络IO等待,命令的执行还是单线程处理
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。