Redis 提供了 redis-cli、redis-server、redis-benchmark 等 Shell 工具。它们虽然比较简单,但是麻雀虽小五脏俱全,有时可以很巧妙地解决一些问题。
redis-cli 详解
1、-r
-r(repeat)选项代表将命令执行多次,例如下面操作将会执行三次 ping 命令:
$ redis-cli -r 3 ping
PONG
PONG
PONG
PONG
2、-i
-i(interval)选项代表每隔几秒执行一次命令,但是 -i 选项必须和 -r 选项一起使用,下面的操作会每隔 1 秒执行一次 ping,一共执行 5 次:
$ redis-cli -r 5 -i 1 ping
PONG
PONG
PONG
PONG
PONG
注意 -i 的单位是秒,不支持毫秒为单位,但是如果想以每隔 10 毫秒执行一次,可以用 -i 0.01,例如:
$ redis-cli -r 5 -i 0.01ping
PONG
PONG
PONG
PONG
PONG
例如下面的操作利用 -r 和 -i 选项,每隔 1 秒输出内存的使用量,一共输出 100 次
$ redis-cli -r 100 -i 1 info |grep used_memory_human
used_memory_human:793.10K
used_memory_human:793.10K
used_memory_human:793.10K
··········································
used_memory_human:793.10K
3、-x
-x 选项代表从标准输入(stdin)读取数据作为 redis-cli 的最后一个参数例如下面的操作会将字符串 world 作为 set hello 的值:
$ echo "world" | redis-cli -x set hello
OK
4、-c
-c(cluster)选项是连接 Redis Cluster 节点时需要使用的,-c 选项可以防止 moved 和 ask 异常。
5、-a
如果 Redis 配置了密码,可以用 -a(auth)选项,有了这个选项就不需要手动输入 auth 命令。
6、--scan 和 --pattern
--scan 选项和 --pattern 选项用于扫描指定模式的键,相当于使用 scan 命令。
7、--slave
--slave 选项是把当前客户端模拟成当前 Redis 节点的从节点,可以用来获取当前 Redis 节点的更新操作,合理的利用这个选项可以记录当前连接 Redis 节点的一些更新操作,这些更新操作很可能是实际开发业务时需要的数据。
下面开启第一个客户端,使用 --slave 选项,看到同步已完成:
$ redis-cli --slave
SYNC with master, discarding 95 bytes of bulk transfer...
SYNC done. Logging commands from master.
"PING"
在开启另一个客户端做一些更新操作:
$ redis-cli
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> set a b
OK
127.0.0.1:6379> incr count
(integer) 1
127.0.0.1:6379> get hello
"world"
再开启另一个客户端做一些更新操作
$ redis-cli
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> incr count
(integer) 1
127.0.0.1:6379> get hello
"world"
第一个客户端会收到 Redis 节点的更新操作:
$ redis-cli --slave
SYNC with master, discarding 95 bytes of bulk transfer...
SYNC done. Logging commands from master.
"PING"
"PING"
"PING"
"PING"
"PING"
"SELECT","0"
"set","hello","world"
"incr","count"
注意:PING 命令是由于主从复制产生的。
8、--rdb
--rdb 选项会请求 Redis 实例生成并发送 RDB 持久化文件,保存在本地。可使用它做持久化文件的定期备份。
9、--pipe
--pipe 选项用于将命令封装成 Redis 通信协议定义的数据格式,批量发送给 Redis 执行。
10、--bigkeys
--bigkeys 选项使用 scan 命令对 Redis 的键进行采样,从中找到内存占用比较大的键值,这些键可能是系统的瓶颈。
11、--eva
--eval 选项用于执行指定 Lua 脚本。
12、--latency
latency 有三个选项,分别是 --latency、--latency-history、--latency-dist。它们都可以检测网络延迟,对于 Redis 的开发和运维非常有帮助。
13、--stat
--stat 选项可以实时获取 Redis 的重要统计信息,虽然 info 命令中的统计信息更全,但是能实时看到一些增量的数据(例如 requests)对于 Redis 的运维还是有一定帮助。
如下所示:
$ redis-cli --stat
------- data ------ --------------------- load -------------------- - child -
keys mem clients blocked requests connections
2 1.79M 2 0 1922200 (+0) 22
2 1.79M 2 0 1922201 (+1) 22
2 1.79M 2 0 1922202 (+1) 22
2 1.79M 2 0 1922203 (+1) 22
14、--raw 和 --no-raw
--no-raw 选项是要求命令的返回结果必须是原始的格式,--raw 恰恰相反,返回格式化后的结果。
在 Redis 中设置一个中文的 value:
$ redis-cli set hello "你好"
OK
如果正常执行 get 或者使用 --no-raw 选项,那么返回的结果是二进制格式:
$ redis-cli get hello
"\xe4\xbd\xa0\xe5\xa5\xbd"
$ redis-cli --no-raw get hello
"\xe4\xbd\xa0\xe5\xa5\xbd"
如果使用了 --raw 选项,将会返回中文:
$ redis-cli --raw get hello
你好