Redis OBJECT命令

Redis OBJECT命令教程

Redis OBJECT 命令允许查看与 相关联的 Redis 的内部对象。通常用在调试或了解键是否使用了特殊的数据类型编码来节省空间。

当使用 Redis 作为缓存时,应用程序还可以使用 OBJECT 命令报告的信息来实现应用程序级别的键优化策略。

Redis OBJECT命令详解

语法

192.168.98.70:6379> OBJECT subcommand [arguments [arguments]]

OBJECT子命令

OBJECT 命令有多个子命令:

命令 描述
OBJECT REFCOUNT 返回特定 key 对应值的引用计数。这个命令主要用于调试。
OBJECT ENCODING 返回特定 key 对应值的内部编码方式。
OBJECT IDLETIME 返回给定 key 自储存以来的空闲时间(idle, 没有被读取也没有被写入),以秒为单位。
每当该 key 被读/写时,idletime 会重新从 0 开始计数。

对象编码方式

字符串

  1. 字符串可以被编码为 raw 或 int 。
  2. raw 为常规的字串编码方式。
  3. 如果一个字串是整数并可以用64位有符号整形来表示,那么为了节省空间,这个字串将以 int64 方式编码。

列表

  1. 列表对应的编码方式为 ziplist 或者 linkedlist。
  2. 当列表较小时会以 ziplist 方式编码以节省存储空间。

集合

  1. 集合对应的编码方式为 intset或者 hashtable。
  2. 当集合较小且只由整数组成时使用 intset 编码。

哈希表

  1. 哈希表对应的编码方式为 ziplist 或者 hashtable。
  2. 当哈希表较小时使用 ziplist 存储。

有序集合

  1. 有序集合对应的编码方式为 ziplist 或者 skiplist。
  2. ziplist 编码可以用于较小的有序集合。
  3. skiplist 编码可以用于任何大小的有序集合。

说明

如果你的操作使用得 Redis 不再能够使用节省空间的编码方式(比如字串变得很长,集合变得很大。),Redis 会自动将其转化为通用编码方式。

返回值

REFCOUNT 和 IDLETIME 返回数字。ENCODING 返回相应的编码类型。

时间复杂度

O(1)

可用版本

>= 2.2.3

案例

KEY的内部编码

使用 ENCODING 命令可以查看 KEY 的内部编码形式

# 查看 KEY 内部编码 192.168.98.70:6379> SET haicoder.net 1 OK 192.168.98.70:6379> OBJECT ENCODING haicoder.net "int" 192.168.98.70:6379> APPEND haicoder.net Hello (integer) 6 192.168.98.70:6379> OBJECT ENCODING haicoder.net "raw" 192.168.98.70:6379> DEL haicoder.net (integer) 1

我们首先,设置 haicoder.net 的值为 1,接着,使用 ENCODING 命令,查看 KEY 的内部编码方式为 int。

最后,我们使用 APPEND 命令,在原来的值后面增加了 Hello 字符串。此时,再次使用 ENCODING 命令,查看 KEY 的内部编码方式为 raw。

KEY的引用计数

使用 REFCOUNT 命令可以查看 KEY 的引用计数

# 查看 KEY 的引用计数 192.168.98.70:6379> SET haicoder.net Redis OK 192.168.98.70:6379> OBJECT REFCOUNT haicoder.net (integer) 1

我们使用 REFCOUNT 命令,查看 KEY 的引用计数,返回引用计数的个数。

KEY的空闲时间

使用 IDLETIME 命令可以查看 KEY 的空闲时间

# 查看 KEY 的空闲时间 192.168.98.70:6379> SET haicoder.net Redis OK # 等待一段时间执行 192.168.98.70:6379> OBJECT IDLETIME haicoder.net (integer) 12 # 再等待一段时间执行 192.168.98.70:6379> OBJECT IDLETIME haicoder.net (integer) 18 # 访问 192.168.98.70:6379> GET haicoder.net "Redis" # 再次立刻访问空闲时间 192.168.98.70:6379> OBJECT IDLETIME haicoder.net (integer) 3

我们首先,使用 IDLETIME 命令可以查看 KEY 的空闲时间,即 KEY 多久没有被访问等待一段时间后,这里的空闲时间显示的是 12,即 12s 没有被访问了。

再过一段时间后,再次查看空闲时间,变成了 18。然后使用 GET 命令,访问了 KEY。再次立刻访问空闲时间,发现变成了 3。

Redis OBJECT命令总结

Redis OBJECT 命令允许查看与键相关联的 Redis 的内部对象。Redis OBJECT 命令语法:

192.168.98.70:6379> OBJECT subcommand [arguments [arguments]]