Redis一些重要指令

53 阅读6分钟

背景

在线上环境,可能会因为开发时隐藏bug或者服务器、网络、其它外部因素等等导致出现Redis或者与其相关的各种问题。

如下是相关重要指令,详情可以查阅redisdoc.com/,部分指令缓存云平台禁止执行(Flush all、Flush db、keys 等命令),部分特殊符号前需要加上转义字符""(比如

 

一、故障检测排查指令

1.1、Client List命令(客户端IP、命令)

以人类可读的格式,返回所有连接到服务器的客户端信息和统计数据。

`redis> CLIENT LIST`

`addr=127.0.0.1:43143 fd=6 age=183 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-``free``=32768 obl=0 oll=0 omem=0 events=r cmd=client`

`addr=127.0.0.1:43163 fd=5 age=35 idle=15 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-``free``=0 obl=0 oll=0 omem=0 events=r cmd=``ping`

`addr=127.0.0.1:43167 fd=7 age=24 idle=6 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-``free``=0 obl=0 oll=0 omem=0 events=r cmd=get`

` ` 

` ` 

`以下是域的含义:`

`addr : 客户端的地址和端口`

`fd : 套接字所使用的文件描述符`

`age : 以秒计算的已连接时长`

`idle : 以秒计算的空闲时长`

`flags : 客户端 flag (见下文)`

`db : 该客户端正在使用的数据库 ID`

`sub : 已订阅频道的数量`

`psub : 已订阅模式的数量`

`multi : 在事务中被执行的命令数量`

`qbuf : 查询缓冲区的长度(字节为单位, 0 表示没有分配查询缓冲区)`

`qbuf-``free` `: 查询缓冲区剩余空间的长度(字节为单位, 0 表示没有剩余空间)`

`obl : 输出缓冲区的长度(字节为单位, 0 表示没有分配输出缓冲区)`

`oll : 输出列表包含的对象数量(当输出缓冲区没有剩余空间时,命令回复会以字符串对象的形式被入队到这个队列里)`

`omem : 输出缓冲区和输出列表占用的内存总量`

`events : 文件描述符事件(见下文)`

`cmd : 最近一次执行的命令`

 

`客户端 flag 可以由以下部分组成:`

`O : 客户端是 MONITOR 模式下的附属节点(slave)`

`S : 客户端是一般模式下(normal)的附属节点`

`M : 客户端是主节点(master)`

`x : 客户端正在执行事务`

`b : 客户端正在等待阻塞事件`

`i : 客户端正在等待 VM I``/O` `操作(已废弃)`

`d : 一个受监视(watched)的键已被修改, EXEC 命令将失败`

`c : 在将回复完整地写出之后,关闭链接`

`u : 客户端未被阻塞(unblocked)`

`A : 尽可能快地关闭连接`

`N : 未设置任何 flag`

 

`文件描述符事件可以是:`

`r : 客户端套接字(在事件 loop 中)是可读的(readable)`

`w : 客户端套接字(在事件 loop 中)是可写的(writeable)`

 

为了 debug 的需要,经常会对域进行添加和删除,一个安全的 Redis 客户端应该可以对 CLIENT LIST 的输出进行相应的处理(parse),比如忽略不存在的域,跳过未知域,诸如此类。

1.2、Config get命令(服务端的配置信息)

CONFIG GET 命令用于取得运行中的 Redis 服务器的配置参数(configuration parameters),在 Redis 2.4 版本中, 有部分参数没有办法用 CONFIG GET 访问,但是在最新的 Redis 2.6 版本中,所有配置参数都已经可以用 CONFIG GET 访问了。

CONFIG GET 接受单个参数 parameter 作为搜索关键字,查找所有匹配的配置参数,其中参数和值以“键-值对”(key-value pairs)的方式排列。

比如执行 CONFIG GET s* 命令,服务器就会返回所有以 s 开头的配置参数及参数的值:

1.3、last save命令(上一次保存时间)

返回最近一次 Redis 成功将数据保存到磁盘上的时间,以 UNIX 时间戳格式表示。

1.4、Monitor命令(客户端请求命令)

实时打印出 Redis 服务器接收到的命令,调试用。

1.6、SLOWLOG命令(请求慢日志查询)

什么是 SLOWLOG

Slow log 是 Redis 用来记录查询执行时间的日志系统。

查询执行时间指的是不包括像客户端响应(talking)、发送回复等 IO 操作,而单单是执行一个查询命令所耗费的时间。

另外,slow log 保存在内存里面,读写速度非常快,因此你可以放心地使用它,不必担心因为开启 slow log 而损害 Redis 的速度。

要查看 slow log ,可以使用 SLOWLOG GET 或者 SLOWLOG GET number 命令,前者打印所有 slow log ,最大长度取决于 slowlog-max-len 选项的值,而 SLOWLOG GET number 则只打印指定数量的日志。

最新的日志会最先被打印:

为测试需要,将 slowlog-log-slower-than 设成了 10 微秒
`redis> SLOWLOG GET`

`1) 1) (integer) 12                      ``# 唯一性(unique)的日志标识符`
`   ``2) (integer) 1324097834              ``# 被记录命令的执行时间点,以 UNIX 时间戳格式表示`
`   ``3) (integer) 16                      ``# 查询执行时间,以微秒为单位`
`   ``4) 1) ``"CONFIG"`                       `# 执行的命令,以数组的形式排列`
`      ``2) ``"GET"`                          `# 这里完整的命令是 CONFIG GET slowlog-log-slower-than`
`      ``3) ``"slowlog-log-slower-than"`

`2) 1) (integer) 11`
`   ``2) (integer) 1324097825`
`   ``3) (integer) 42`
`   ``4) 1) ``"CONFIG"`
`      ``2) ``"GET"`
`      ``3) ``"*"`

`3) 1) (integer) 10`
`   ``2) (integer) 1324097820`
`   ``3) (integer) 11`
`   ``4) 1) ``"CONFIG"`
`      ``2) ``"GET"`
`      ``3) ``"slowlog-log-slower-than"`
`# ...`
 

 

二、Key相关指令

2.1、EXPIRE(设置过期时间)

为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除。

`redis> SET cache_page ``"www.google.com"`

`OK`
`redis> EXPIRE cache_page 30  ``# 设置过期时间为 30 秒`
`(integer) 1`
2.2、DEL(删除指定key)

删除给定的一个或多个 key 。

不存在的 key 会被忽略。

同时删除多个 key
`redis> SET name ``"redis"`
`OK`
`redis> SET type ``"key-value store"`
`OK`
`redis> SET website ``"redis.com"`
`OK`
`redis> DEL name type website`
`(integer) ``3`
2.3、EXISTS(查看指定key是否存在)

检查给定 key 是否存在。

`redis> SET db ``"redis"`
`OK`

`redis> EXISTS db`
`(integer) 1`

`redis> DEL db`
`(integer) 1`

`redis> EXISTS db`
`(integer) 0`
2.4、KEYS(查询全部key)

查找所有符合给定模式 pattern 的 key 。

redis> KEYS *o*
1) "four"
2) "two"
3) "one"
 
redis> KEYS t??
1) "two"
 
redis> KEYS t[w]*
1) "two"
 
redis> KEYS *  # 匹配数据库内所有 key
1) "four"
2) "three"
3) "two"
4) "one"
2.5、TTL(给指定key设置过期时间)
以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。
# 不存在的 key
 
redis> FLUSHDB
OK
redis> TTL key
(integer) -2
 
# key 存在,但没有设置剩余生存时间
 
redis> SET key value
OK
redis> TTL key
(integer) -1
# 有剩余生存时间的 key
 
redis> EXPIRE key 10086
(integer) 1
 
redis> TTL key
(integer) 10084
2.6、TYPE(查询某个key类型)
返回 key 所储存的值的类型。
# 字符串
 
redis> SET weather "sunny"
OK
 
redis> TYPE weather
string
 
 
# 列表
 
redis> LPUSH book_list "programming in scala"
(integer) 1
 
redis> TYPE book_list
list
 
 
# 集合
 
redis> SADD pat "dog"
(integer) 1
 
redis> TYPE pat
set
2.7、OBJECT命令(查询某个key类型)
OBJECT REFCOUNT <key> 返回给定 key 引用所储存的值的次数。此命令主要用于除错。
OBJECT ENCODING <key> 返回给定 key 锁储存的值所使用的内部表示(representation)。
OBJECT IDLETIME <key> 返回给定 key 自储存以来的空闲时间(idle, 没有被读取也没有被写入),以秒为单位