2年前端7~9月面试经历
这张图里,接收到用户的请求后,全部推送到一个队列里,然后交给文件事件分派器,而它是单线程的工作方式。Redis 又是基于它工作的,所以说 Redis 是单线程的。 总结 基于内存实现
高效的数据结构
合理的数据编码
合适的线程模型
应对大量的请求,Redis 中使用 I/O 多路复用程序同时监听多个套接字,并将这些事件推送到一个队列里,然后逐个被执行。最终将结果返回给客户端。 2、避免上下文切换 你一定听说过,Redis 是单线程的。那么单线程的 Redis 为什么会快呢? 因为多线程在执行过程中需要进行 CPU 的上下文切换,这个操作比较耗时。Redis 又是基于内存实现的,对于内存来说,没有上下文切换效率就是最高的。多次读写都在一个CPU 上,对于内存来说就是最佳方案。 3、单线程模型 顺便提一下,为什么 Redis 是单线程的。
Redis 中使用了 Reactor 单线程模型,你可能对它并不熟悉。没关系,只需要大概了解一下即可。 理的数据编码 对于每一种数据类型来说,底层的支持可能是多种数据结构,什么时候使用哪种数据结构,这就涉及到了编码转化的问题。 那我们就来看看,不同的数据类型是如何进行编码转化的: String:存储数字的话,采用int类型的编码,如果是非数字的话,采用 raw 编码; List:字符串长度及元素个数小于一定范围使用 ziplist 编码,任意条件不满足,则转化为 linkedlist 编码; Hash:hash 对象保存的键值对内的键和值字符串长度小于一定值及键值对; Set:保存元素为整数及元素个数小于一定范围使用 intset 编码,任意条件不满足,则使用 hashtable 编码; Zset:zset 对象中保存的元素个数小于及成员长度小于一定值使用 ziplist 编码,任意条件不满足,则使用 skiplist 编码。 合适的线程模型
Redis 快的原因还有一个是因为使用了合适的线程模型: (编辑:莆田站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |