- 围绕每个数据结构介绍相关命令
- 当前版本的redis支持10个数据类型
- Redis 底层在实现上述数据结构的时候,
- 会在源码层面,针对上述实现进行特定的优化,来达到 节省时间/节省空间 效果,
- 内部的具体实现的数据结构(编码方式),还会有变数
- redis 承诺,现在我这有个 hash 表,你进行 査询,插入, 删除 操作,都保证 O(1)
- 但是,这个背后的实现,不一定就是一个标准的 hash 表.(内部可能会进行优化)
- 可能再特定场景下,使用别的数据结构实现.
- 但是仍然保证时间复杂度符合承诺!!
1.数据结构对应的编码方式
内部编码方式,redis内部自适应
1.1 object encoding key
査看 key 对应的 value 的实际编码方式
redis 会自动根据当前的实际情况选择内部的编码方式.自动适应的,
2.单线程模型的工作过程
redis 只使用一个线程,处理所有的命令请求.
不是说一个 redis 服务器进程内部真的就只有一个线程,
其实也有多个线程,多个线程是在处理 网络IO
假设, 有多个客户端, 同时操作一个 redis 服务器
redis 能够使用 单线程模型 很好的工作,原因主要在于 redis 的核心业务逻辑, 都是短平快的~~不太消耗 cpu 资源也就不太吃多核了!!!【特殊情况,特殊处理具体问题,具体分析】
弊端!!redis 必须要特别小心,某个操作占用时间长,就会阻塞其他命令的执行!!
3.单线程为什么那么快(面试题)
快是相对而言(相对于数据库mysql)
1.redis 访问内存,数据库则是访问硬盘,
2.redis 核心功能,比数据库的核心功能更简单.
数据库对于数据的插入删除査询....都有更复杂的功能支持, 这样的功能势必要花费更多的开销比如,针对插入删除,数据库中的各种约束,都会使数据库做额外的工作,
redis 干的活少,提供的功能相比于 mysql 也是少了不少~~
3. 单线程模型,避免了一些不必要的线程竞争开销.
redis 每个基本操作,都是短平快的~~ 就是简单操作一下内存数据,不是什么特别消耗 cpu 的操作.就算搞多个线程,也提升不大~~
4. 处理网络IO 的时候, 使用了 epoll 这样的IO 多路复用机制~
- 【示例】