5.Redis之常用数据结构&单线程模型

  • 围绕每个数据结构介绍相关命令
  • 当前版本的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 多路复用机制~

  • 【示例】

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值