【Redis开发与运维】学习笔记(二)-----Redis全局命令及单线程架构

Redis全局命令

查看所有键
Keys *
键总数
dbsize
dbsize命令在计算键总数时不会遍历所有键,而是直接获取Redis内置的
键总数变量,所以dbsize命令的时间复杂度是O(1)。而keys命令会遍历所
有键,所以它的时间复杂度是O(n),当Redis保存了大量键时,线上环境
禁止使用。
检查键是否存在
exists key
如果键存在则返回1,不存在则返回0
删除键
返回结果为成功删除键的个数,假设删除一个不存在的键,就会返回0,支持删除各种类型的数据以及一条命令删除多个数据
del key [key …]
键过期
Redis支持对键添加过期时间,当超过过期时间后,会自动删除键
expire key second: 键在seconds秒后过期
expireat key timestamp:键在秒级时间戳timestamp后过期。
查看键剩余过期时间
ttl key
ttl命令会返回键的剩余过期时间,单位是秒,它有3种返回值:1. 大于等于0的整数:键剩余的过期时间;2.·-1:键没设置过期时间;3. ·-2:键不存在。
pttl key
pttl 命令会返回键的剩余过期时间,单位是毫秒
键的数据结构类型
type key
如果键不存在,则返回none.
键重命名
rename key newkey
确保只有newKey不存在时候才被覆盖
renamenx key newkey
随机返回一个键
randomkey

Redis五种数据类型以及其内部编码

type key的名字可以看到其数据类型,而object encoding key的名字 命令可以查询内部编码。
【Redis开发与运维】学习笔记(二)-----Redis全局命令及单线程架构_第1张图片

Redis 单线程架构

Redis客户端和服务端请求过程
因为Redis是单线程来处理命令的,所以一条命令从客户端达到服务端不会立刻被执行,所有命令都会进入一个队列中,然后逐个被执行。为了保证命令执行的高效性,Redis使用了I/O多路复用技术来解决I/O的问题。
【Redis开发与运维】学习笔记(二)-----Redis全局命令及单线程架构_第2张图片
为什么单线程还这么快?

  1. 纯内存访问
  2. 非阻塞I/O
  3. 单线程避免了线程切换和竞态产生的消耗

Redis非阻塞I/O原型
【Redis开发与运维】学习笔记(二)-----Redis全局命令及单线程架构_第3张图片

单线程的缺点:
对于每个命令的执行时间是有要求的。如果某个命令执行过长,会造成其他命令的阻塞。

你可能感兴趣的:(Redis学习)