Redis-API-全局变量

全局命令

Redis 有 5 种数据结构,它们是键值对中的值,对于键来说有一些通用的命令。

查看所有的键

keys *

《Redis-API-全局变量》 image

键的总数

dbsize

《Redis-API-全局变量》 image

使用dbsize会获取 Reids 内置的键总数变量,而 keys 命令会遍历所有键。所以,当 Redis 保存了大量键时,线上环境禁止使用。

检查键是否存在

exists key

删除键

del key [key ...]

《Redis-API-全局变量》 image

键过期

expire key seconds

《Redis-API-全局变量》 image

该命令会返回 3 种可能的值:

  • 大于 0 的整数,表示键剩余的过期时间
  • -1, 表示键没有设置过期时间
  • -2, 表示键不存在

也可以通过ttl命令来查看键的剩余时间。

键的数据结构类型

type key

《Redis-API-全局变量》 image

数据结构和内部编码

每种数据结构都有自己底层的内部编码实现,而且是多种实现,在合适的场景下使用合适的内部编码。

查看内部编码

object encoding

《Redis-API-全局变量》 image

这种设计的好处有两个:

  • 可以改进内部编码,且不影响用户的使用。
  • 多种内部编码可以适用于多种场合,充分利用不同编码的不同特性。

单线程架构

Redis 使用了单线程架构和 I/O 多路复用模型来实现高性能的内存数据库服务。

每一条从客户端到服务器的命令都会被加入队列,之后轮询执行。也就说,同一时刻,不会有两条命令执行。

同时,因为一下原因,所以这样单线程也能十分高效:

  • 纯内存访问

    内存的响应时间大约为100纳秒,这是 Redis 达到每秒万级别访问的重要基础。

  • 非阻塞 I/O

    Redis 使用 epoll 作为 I/O 多路复用技术的实现,再加上 Redis 自身的事件处理模型将 epoll 中的链接、读写、关闭都转换为事件,不在网络 I/O 上浪费太多的时间。

  • 单线程避免了线程切换和竞态产生的消耗

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

    原文作者:苏近之2017
    原文地址: https://www.jianshu.com/p/6791c0327903
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞