【攻克Redis】全局命令、单线程模型

​ Redis有5种数据结构,它们是键值对中的值。

预备

全局命令

#查看所有键,时间复杂读O(n),线上环境禁止使用
keys *
#键总数,不会遍历所有键,直接获取redis内置的键总数变量
dbsize
#检查键是否存在
exists key
#删除键
del key [key ...]
#键过期
expire key seconds
#查看键过期时间:返回值大于0为剩余时间;-1没有设置过期时间;-2键不存在
ttl key
#键的类型
type key
#查看内部编码
object encoding key

这里写图片描述

这里写图片描述

单线程架构

单线程模型
  1. 每次客户端调用经历如下过程
    • 发送命令
    • 执行命令
    • 返回结果
  2. 执行命令,一条命令令从客户端达到服务端不会立刻被执行,所有命令都会进入一个队列中,然后逐个被执行
  3. Redis使用了I/O多路复用技术来解决I/O的问题

为什么单线程还能这么快?为什么Redis使用单线程模型会达到每秒万级别的处理能力呢

  • 第一,纯内存访问,内存响应时间为100纳秒
  • 第二,非阻塞I/O,Redis使用epoll作为I/O多路复用技术的实现,再加上 Redis自身的事件处理模型将epoll中的连接、读写、关闭都转换为事件,不 在网络I/O上浪费过多的时间
  • 第三,单线程避免了线程切换和竞态产生的消耗

单线程存在那些弊端?

​ 对于每个命令的执行时间是有要求的。如果 某个命令执行过长,会造成其他命令的阻塞,对于Redis这种高性能的服务 来说是致命的,所以Redis是面向快速执行场景的数据库

猜你喜欢

转载自blog.csdn.net/zlt995768025/article/details/81872260