辛德蕾拉|面试官:Redis缓存了解吗?面对这11道题是否有很多问号?( 二 )
文件事件处理器的结构包含 4 个部分:
- 多个 socket
- IO 多路复用程序
- 文件事件分派器
- 事件处理器(连接应答处理器、命令请求处理器、命令回复处理器)
来看看客户端与 redis 的一次通信过程:
客户端 socket01 向 redis 进程的 server socket 请求建立连接 , 此时 server socket 会产生一个AE_READABLE 事件 , IO 多路复用程序监听到 server socket 产生的事件后 , 将该 socket 压入队列中 。
文件事件分派器从队列中获取 socket , 交给连接应答处理器 。 连接应答处理器会创建一个能与客户端通信的 socket01 , 并将该 socket01 的 AE_READABLE 事件与命令请求处理器关联 。
假设此时客户端发送了一个 set key value 请求 , 此时 redis 中的 socket01 会产生AE_READABLE 事件 , IO 多路复用程序将 socket01 压入队列 , 此时事件分派器从队列中获取到 socket01 产生的AE_READABLE 事件 , 由于前面 socket01 的 AE_READABLE 事件已经与命令请求处理器关联 , 因此事件分派器将事件交给命令请求处理器来处理 。 命令请求处理器读取 socket01 的 key value 并在自己内存中完成 key value 的设置 。 操作完成后 , 它会将 socket01 的 AE_WRITABLE 事件与命令回复处理器关联 。
如果此时客户端准备好接收返回结果了 , 那么 redis 中的 socket01 会产生一个 AE_WRITABLE 事件 , 同样压入队列中 , 事件分派器找到相关联的命令回复处理器 , 由命令回复处理器对 socket01 输入本次操作的一个结果 , 比如 ok , 之后解除 socket01 的 AE_WRITABLE 事件与命令回复处理器的关联 。
这样便完成了一次通信 。
为啥 redis 单线程模型也能效率这么高?
- 纯内存操作
- 核心是基于非阻塞的 IO 多路复用机制
- 单线程反而避免了多线程的频繁上下文切换问题
其实问这个问题 , 主要有两个原因:
- 看看你到底有没有全面的了解 redis 有哪些功能 , 一般怎么来用 , 啥场景用什么 , 就怕你别就会最简单的 KV 操作;
- 看看你在实际项目里都怎么玩儿过 redis 。
面试题剖析redis 主要有以下几种数据类型:
- string
- hash
- list
- set
- Zset(sorted set)
这是最简单的类型 , 就是普通的set和get , 做简单的KV缓存 。
hash
这个是类似 map 的一种结构 , 这个一般就是可以将结构化的数据 , 比如一个对象(前提是这个对象没嵌套其他的对象)给缓存在 redis 里 , 然后每次读写缓存的时候 , 可以就操作 hash 里的某个字段 。
hset person name bingohset person age 20hset person id 1 hget person nameperson = { "name": "bingo", "age": 20, "id": 1}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 网友|面试时话都没讲就赶人走?”,杭州小伙想不通:“就因为家里拆迁了
- 北青网综合|杭州小伙想不通:“就因为家里拆迁了,面试话都没讲就赶人走?”
- 爱羽客羽毛球网|今年不会参加任何比赛,辛德胡:生命最重要
- 学艺说|艺考面试穿搭指南,各专业还有这些不同穿法!
- 辛德蕾拉华为遭川普判死日媒爆2大关键深圳也危险了
- 北京日报客户端|太狠了!男子打伤自己谎称面试被打敲诈招聘单位
- 每日桂林|曝光文化宫这家店!老板公然向面试女孩提无耻要求!爆料人:我有完整的记录!
- 辛德蕾拉共享单车如何成了出租车的竞争对手
- 爱上搞笑君|面试官是个美女,面试官问俺,开心笑话:今天去面试
- 爱做事的实习生【麦肯锡实习怎么找】腾讯面试官:请预测一下iPhone 12的全球销量?
