本文主要记录一下redis调试相关的命令。
命令总览:
1.PING
2.ECHO
3.OBJECT
4.SLOWLOG
5.MONITOR
6.DEBUG_OBJECT
7.DEBUG_SEGFAULT
命令介绍:
1.PING
可用版本: >=1.0.0
时间复杂度: O(1)
命令格式: PING
作用:
使用客户端向 Redis 服务器发送一个 PING ,如果服务器运作正常的话,会返回一个 PONG 。
返回值:
如果连接正常就返回一个 PONG ,否则返回一个连接错误。
命令演示:
127.0.0.1:6379> ping PONG
2.ECHO
可用版本: >=1.0.0
时间复杂度: O(1)
命令格式: ECHO message
作用:
打印一个特定的信息message。
返回值:
返回message。
命令演示:
127.0.0.1:6379> echo "hello" "hello"
3.OBJECT
可用版本: >=2.2.3
时间复杂度: O(1)
命令格式: OBJECT subcommand [argments [argments]]
作用:
OBJECT 命令允许从内部察看给定 key 的 Redis 对象, 它通常用在除错(debugging)或者了解为了节省空间而对 key 使用特殊编码的情况。 当将Redis用作缓存程序时,你也可以通过 OBJECT 命令中的信息,决定 key 的驱逐策略(eviction policies)。
子命令:
OBJECT REFCOUNT <key> 返回给定 key 引用所储存的值的次数。此命令主要用于除错。
OBJECT ENCODING <key> 返回给定 key 锁储存的值所使用的内部表示(representation)。
OBJECT IDLETIME <key> 返回给定 key 自储存以来的空闲时间(idle, 没有被读取也没有被写入),以秒为单位。
返回值:
REFCOUNT 和 IDLETIME 返回数字。 ENCODING 返回相应的编码类型。
其它:
字符串可以被编码为 raw (一般字符串)或 int (为了节约内存,Redis 会将字符串表示的 64 位有符号整数编码为整数来进行储存)。
列表可以被编码为 ziplist 或 linkedlist 。 ziplist 是为节约大小较小的列表空间而作的特殊表示。
集合可以被编码为 intset 或者 hashtable 。 intset 是只储存数字的小集合的特殊表示。
哈希表可以编码为 zipmap 或者 hashtable 。 zipmap 是小哈希表的特殊表示。
有序集合可以被编码为 ziplist 或者 skiplist 格式。 ziplist 用于表示小的有序集合,而 skiplist 则用于表示任何大小的有序集合。
命令演示:
127.0.0.1:6379> set name 'Zhangsan' OK 127.0.0.1:6379> OBJECT refcount name (integer) 1 127.0.0.1:6379> OBJECT idletime name (integer) 27 127.0.0.1:6379> get name "Zhangsan" 127.0.0.1:6379> OBJECT idletime name (integer) 1 127.0.0.1:6379> OBJECT encoding name "embstr" 127.0.0.1:6379> set bnum 111999999999999999999999999999999999 OK 127.0.0.1:6379> OBJECT encoding bnum "embstr" 127.0.0.1:6379> set snum 123 OK 127.0.0.1:6379> OBJECT encoding snum "int"
4.SLOWLOG
可用版本: >=2.2.12
时间复杂度: O(1)
命令格式: slowlog get number
作用:
Slow log 是 Redis 用来记录查询执行时间的日志系统。
查询执行时间指的是不包括像客户端响应(talking)、发送回复等 IO 操作,而单单是执行一个查询命令所耗费的时间。
另外,slow log 保存在内存里面,读写速度非常快,因此你可以放心地使用它,不必担心因为开启 slow log 而损害 Redis 的速度。
设置:
Slow log 的行为由两个配置参数(configuration parameter)指定,可以通过改写 redis.conf 文件或者用 CONFIG GET 和 CONFIG SET 命令对它们动态地进行修改。
第一个选项是 slowlog-log-slower-than ,它决定要对执行时间大于多少微秒(microsecond,1秒 = 1,000,000 微秒)的查询进行记录。
比如执行以下命令将让 slow log 记录所有查询时间大于等于 100 微秒的查询:
CONFIG SET slowlog-log-slower-than 100
而以下命令记录所有查询时间大于 1000 微秒的查询:
CONFIG SET slowlog-log-slower-than 1000
另一个选项是 slowlog-max-len ,它决定 slow log 最多能保存多少条日志, slow log 本身是一个 FIFO 队列,当队列大小超过 slowlog-max-len 时,最旧的一条日志将被删除,而最新的一条日志加入到 slow log ,以此类推。
以下命令让 slow log 最多保存 1000 条日志:
CONFIG SET slowlog-max-len 1000
返回值:
取决于不同命令,返回不同的值。
其它:
不添加number参数的话,将会打印所有的slow log,有number参数的话,打印前number条slow log,最新的日志将会最先打印出来。
可以使用slowlog len查看当前日志数量。
可以使用slowlog reset 清空当前记录的slow log。
命令演示:
127.0.0.1:6379> CONFIG GET slowlog-log-slower-than 1) "slowlog-log-slower-than" 2) "10000" 127.0.0.1:6379> CONFIG GET slowlog-max-len 1) "slowlog-max-len" 2) "128" 127.0.0.1:6379> SLOWLOG get (empty array) 127.0.0.1:6379> SLOWLOG get 1 (empty array) 127.0.0.1:6379> SLOWLOG len (integer) 0 127.0.0.1:6379> SLOWLOG reset OK
5.MONITOR
可用版本: >=1.0.0
时间复杂度: O(N)
命令格式: MONITOR
作用:
实时打印出Redis服务器接收到的命令。
返回值:
返回OK。
6.DEBUG_OBJECT
可用版本: >=1.0.0
时间复杂度: O(1)
命令格式: DEBUG OBJECT key
作用:
查看key的相关信息
返回值:
key存在,返回相关信息,不存在返回error。
127.0.0.1:6379> DEBUG OBJECT snum Value at:0x7ff60804da80 refcount:2147483647 encoding:int serializedlength:2 lru:689083 lru_seconds_idle:1752 127.0.0.1:6379> DEBUG OBJECT snumc (error) ERR no such key
7.DEBUG_SETFAULT
可用版本: >=1.0.0
时间复杂度: O(1)
命令格式: DEBUG SETFAULT
作用:
执行一个不合法的内存访问从而让 Redis 崩溃,仅在开发时用于 BUG 模拟。
返回值:
无。