Redis 基础教程

Redis 命令

Redis 高级教程

Redis 笔记

Redis OBJECT 命令

Redis 键(Keys) Redis 键(Keys)


Redis OBJECT 命令允许从内部查看指定 key 的 Redis 对象信息。它通常用在调试,或者了解相关 key 是否使用特殊编码的数据类型来节省空间等。此外,当 Redis 作为缓存时,你也可以通过 OBJECT 命令中的信息,决定 key 的淘汰策略。

命令格式

OBJECT subcommand [arguments [arguments ...]]

可用版本:>=2.2.3

时间复杂度:O(1)

命令参数

OBJECT 命令支持多个子命令:

  • OBJECT REFCOUNT <key>:返回指定 key 引用所储存的值的次数。此命令主要用于调试。
  • OBJECT ENCODING <key>:返回指定 key 所储存的值所使用的内部表现形式(或者叫编码情况)。
  • OBJECT IDLETIME <key>:返回指定 key 自储存以来的空闲时间(没有被读取也没有被写入),以秒为单位。虽然该命令返回以秒为单位,但是实际的时间粒度是 10 秒,以后会对实现有所变化。该子命令对淘汰策略设置 LRU 或者没有设置时有用。
  • OBJECT FREQ <key>:返回指定 key 所存储的值的访问频率对数。该子命令对淘汰策略设置 LFU 时有用。
  • OBJECT HELP:返回帮助文档。

针对对象的编码方式(encode)有多种方式:

  • 字符串可以被编码为 raw(一般字符串)或 int(为了节省内存,Redis 会将字符串表示的 64 位有符号整数编码为整数来进行储存)。
  • 列表可以被编码为 ziplist 或 linkedlist。ziplist 是为节省大小较小的列表空间而作的特殊表示。
  • 集合可以被编码为 intset 或者 hashtable。intset 是只储存数字的小集合的特殊表示。
  • 哈希表可以编码为 zipmap 或者 hashtable。zipmap 是小哈希表的特殊表示。
  • 有序集合可以被编码为 ziplist 或者 skiplist。ziplist 用于表示小的有序集合,而 skiplist 则用于表示任何大小的有序集合。

一旦执行使 Redis 无法保留节省空间的编码的操作(比如,将一个只有 1 个元素的集合扩展为一个有 100 万个元素的集合),所有特殊编码类型将自动转换为常规类型。

命令返回值

不同的子命令有不同的返回值。

  • REFCOUNT 和 IDLETIME 返回整数值。
  • ENCODING 返回相应的编码类型。

示例

redis> SET mystring hello
OK
redis> LPUSH mylist world
(integer) 1
redis> GET mystring
"hello"
redis> OBJECT REFCOUNT mystring
(integer) 1
redis> OBJECT ENCODING mystring
"embstr"
redis> OBJECT ENCODING mylist
"quicklist"
redis> OBJECT IDLETIME mylist
(integer) 95