首页 > 应用开发 > IT综合 > 直播类app开发,有必要了解Redis相关知识
Redis作为现在直播类app开发中必不可少的组件,在缓存、分布式锁、session共享等等场景中被大量使用。熟练使用之余,更需要了解一下其原理。
Redis快的原因
注释:
file descriptor 文件描述符。Linux系统中,把一切都看做是文件,当进程打开现有文件或创建文件时,内核向进程返回一个文件描述符(fd)。可以把fd看做是一个索引,这样要操作文件的时候,我们直接找到索引就可以对其进行操作。
I/O多路复用
因为Redis是单线程,所有的操作都是按照顺序线性操作的,由于读写操作等待用户输入或者输出都是阻塞的,所以I/O操作在正常情况下往往不能直接返回,这就会导致文件的I/O阻塞。一共就这么一个线程,阻塞之后直播类app开发便无法对外提供服务。现在使用I/O多路复用便可以解决这个问题,又保留了单线程的一些优势。
对上图Redis的I/O多路复用模型进行一下描述:
例如:以Redis的I/O多路复用程序epoll函数为例,当多个直播类app开发的客户端连接服务器时,Redis会将客户端socket对应的fd注册进epoll中,然后epoll同时监听多个fd是否有数据到来,如果有数据来了就通知事件处理器处理命令,这样就不会存在服务端一直等待某个客户端给数据的场景。
多唠两句
I/O多路复用程序有多种实现方式,例如有select、poll、kqueue、epoll,redis默认使用epoll
epoll不负责不传递数据,只负责通知,这点很重要
既然Redis默认使用epoll,那肯定是有原因的,epoll的优点:
如果使用select/poll,都需要把fd集合从用户态拷贝到内核态,这个开销在fd很多时消耗很大。而epoll直接使用共享内存,不用在用户态和内核态之间来回拷贝
Redis6.0版本之后,在处理网络数据的读写和协议解析时可以使用多线程(默认仍然是单线程,可以设置为多线程),执行命令仍然是单线程。
以上内容仅作为直播类app开发的学习记录,如有错误请留言指正,谢谢。
声明:本文由云豹科技转发自红酒博客,如有侵权请联系作者删除
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70002045/viewspace-2843491/ ,如需转载,请注明出处,否则将追究法律责任。