Redis提供了redis-cli 、 redis-server 、 redis-benchmark 等shell工具。
1、-r
-r(repeat)选项代表将命令执行多次;如执行三次ping:
bogon:~ ww$ redis-cli -r 3 ping
PONG
PONG
PONG
bogon:~ ww$
2、-i
-i(interval)选项代表每隔几秒执行一次命令,但是-i必须和-r一起使用。
//每隔1秒执行一次ping,执行五次
bogon:~ ww$ redis-cli -r 5 -i 1 ping
PONG
PONG
PONG
PONG
PONG
bogon:~ ww$
注意:-i的单位是秒,不支持毫秒,如果想每隔10毫秒执行一次,可以用-i 0.01
info命令:返回关于 Redis 服务器的各种信息和统计数值。
使用方法: redis-cli info
3、-x
代表从标准输入读取数据作为redis-cli的最后一个参数,如:
bogon:~ bjhl$ echo 'world' |redis-cli -x set wao
OK
bogon:~ bjhl$ redis-cli
127.0.0.1:6379> get wao
"world\n"
127.0.0.1:6379>
4、-c
连接Redis Cluster 节点时需要使用的,-c选项可以防止moved和ask异常。
5、-a
如果Redis配置了密码,可以用-a(auth)选项,有了这个选项就不需要手动输入auth命令。
6、--scan 和 --pattern
--scan选项和--pattern 选项用于扫描指定模式的键,相当于使用scan命令
7、--slave
该选项就是把当前客户端模拟成当前的redis节点的从节点,可以用来获取当前redis节点的更新操作。合理的利用这个选项可以记录当前连接redis节点的一些更新操作,这些更新操作很可能是实际开发业务时需要的数据。
8、--rdb
该选项会请求Redis实例生成并发送RDB持久化文件,保存在本地。可使用持久化文件的定期备份。
9、--pipe
该选项用于将命令封装成Redis通讯协议定义的数据格式,批量发给Redis执行。
10、--bigkeys
该选项使用scan命令对Redis的键进行采样,从中找到内存占用比较大的键值,这些键可能是系统的瓶颈。
bogon:~ ww$ redis-cli --bigkeys
# Scanning the entire keyspace to find biggest keys as well as
# average sizes per key type. You can use -i 0.1 to sleep 0.1 sec
# per 100 SCAN commands (not usually needed).
[00.00%] Biggest string found so far 'he' with 6 bytes
[00.00%] Biggest string found so far 'sl' with 12 bytes
[00.00%] Biggest list found so far 'mylist' with 32298 items
-------- summary -------
Sampled 9 keys in the keyspace!
Total key length in bytes is 59 (avg len 6.56)
Biggest string found 'sl' has 12 bytes
Biggest list found 'mylist' has 32298 items
8 strings with 39 bytes (88.89% of keys, avg size 4.88)
1 lists with 32298 items (11.11% of keys, avg size 32298.00)
0 sets with 0 members (00.00% of keys, avg size 0.00)
0 hashs with 0 fields (00.00% of keys, avg size 0.00)
0 zsets with 0 members (00.00% of keys, avg size 0.00)
0 streams with 0 entries (00.00% of keys, avg size 0.00)
bogon:~ ww$
11、--eval
该选项用于执行Lua脚本
12、--latency
latency有三个选项,分别是--latency、--latency-history、--latency-dist;他们都可以检测网络延迟,对于Redis开发和运维非常有帮助。
1)--latency
该选项可以测试客户端到目标Redis的网络延迟,如客户端A和Redis在一个机房A,客户端B在另外一个机房B,那么该命令就会看的出,B的平均网络延迟会稍微高一些。
bogon:~ ww$ redis-cli -h 127.0.0.1 -p 6379 --latency
min: 0, max: 1, avg: 0.25 (424 samples)
如上代码,如果是B使用该命令,avg应该会比A使用该命令的值高。因为距离比较远
2)--latency-history
--latency的执行结果只有一条,如果想以分时段的形式了解延迟信息,可以使用 --latency-history 选项:
redis-cli -h 127.0.0.1 --latency-history
redis-cli -h 127.0.0.1 -p 6379 --latency-history
min: 0, max: 2, avg: 0.27 (1301 samples) -- 15.01 seconds range
min: 0, max: 2, avg: 0.27 (1301 samples) -- 15.00 seconds range
.
.
.
min: 0, max: 1, avg: 0.28 (1308 samples) -- 15.00 seconds range
可以看出,每15秒输出一次,可以通过-i参数控制时间间隔
如: redis-cli -h 127.0.0.1 -p 6379 --latency-history -i 1 //一秒输出一次
3)--latency-dist
该选项会使用统计图表的形式从控制台输出延迟统计信息。
13、--stat
该选项可以实时获取Redis的重要统计信息,虽然info命令中的统计信息更全,但是能实时看到一些增量的数据(如requests)对于redis的运维还是有一定帮助的。
14、--raw和--no-raw
--no-raw 选项是要求命令的返回结果必须是原始的格式,--raw则恰恰相反,返回时格式化后的结果。
bogon:~ ww$ redis-cli --no-raw get he
"\xe5\x91\xb5\xe5\x91\xb5"
bogon:~ ww$ redis-cli --raw get he
呵呵
bogon:~ ww$
redis-server 除启动Redis之外,还有一个--test-memory选项,可以用来检测当前操作系统能否稳定的分配指定容量的内存给Redis,通过这种检测能避免因为内存问题造成的redis奔溃。
如:redis-server --test-memoey 1024 ;检测当前系统能否为redis提供1G的内存。
该功能更偏向于调试和测试。例如:想迅速占满机器内存做一些极端的测试。该功能是个不错的选择。
redis-benchmark可以为Redis做基准性能测试,它提供了很多选项帮助开发和运维人员测试Redis的相关性能。
1、-c
-c(clients) 选项代表客户端的并发数量(默认是50)
2、-n
-n(num)选项代表客户端请求总量(默认是100 000)
例如:redis-benchmark -c 100 -n 20000 代表 100个客户端同事请求redis,一共执行20000次,redis-benchmark会对各类数据结构的命令进行测试,并给出性能指标。
//执行命令后截取输出的一段进行说明
====== GET ======
20000 requests completed in 0.34 seconds
100 parallel clients
3 bytes payload
keep alive: 1
73.86% <= 1 milliseconds
99.93% <= 2 milliseconds
100.00% <= 2 milliseconds
58479.53 requests per second
执行命令后,如上面输出,测试get命令,一次执行20000个请求,0.34秒完成,每次请求数据量是3个字节,73.86%<=1毫秒,Redis每秒可以执行58479.53次ge请求。
3、-q
-q选项仅仅显示redis-benchmark的requests per second 信息,例如:
bogon:password ww$ redis-benchmark -c 100 -n 20000 -q
PING_INLINE: 69930.07 requests per second
PING_BULK: 53333.33 requests per second
SET: 58823.53 requests per second
GET: 60790.27 requests per second
INCR: 71174.38 requests per second
LPUSH: 69204.15 requests per second
RPUSH: 68965.52 requests per second
LPOP: 68259.38 requests per second
RPOP: 69686.41 requests per second
SADD: 68965.52 requests per second
HSET: 71174.38 requests per second
SPOP: 62305.29 requests per second
LPUSH (needed to benchmark LRANGE): 68728.52 requests per second
LRANGE_100 (first 100 elements): 17167.38 requests per second
LRANGE_300 (first 300 elements): 8041.82 requests per second
LRANGE_500 (first 450 elements): 5625.88 requests per second
LRANGE_600 (first 600 elements): 4013.65 requests per second
MSET (10 keys): 53050.40 requests per second
4、-r
在一个空的Redis上执行了redis-benchmark会发现只有四个键:
127.0.0.1:6379> keys *
1) "myset:__rand_int__"
2) "key:__rand_int__"
3) "mylist"
4) "counter:__rand_int__"
如果想向Redis插入更多的键,可以执行使用-r(randon)选项。可以向redis插入更多的键
注:-r后的的参数不是随机数的个数,如 redis-benchmark -r 10000 表示在key,counter,myset键后加一个12位的后缀,-r代表只对后四位做随机出来,
5、-p
-p 选项代表每个pipeline的数据量 (默认为1)
6、-t <boolean>
-t 选项可以对指定命令进行基准测试
bogon:~ ww$ redis-benchmark -t get,set -q
SET: 64516.13 requests per second
GET: 61728.39 requests per second
bogon:~ ww$
7、-k
该选项代表客户端能否使用keepalive,1为使用,0为不使用,默认值为1;
8、--csv
该选项会将结果按照csv格式输出,便于后续处理,如导出到Excel等。
bogon:~ ww$ redis-benchmark -t get,set --csv
"SET","65659.88"
"GET","61236.99"
bogon:~ ww$
四、Pipeline详解
Redis客户端发送一条命令分四个过程:1:发送命令,2:命令排队,3:命令执行,4:返回结果。
其中1和4称为Round Trip Time (RTT,往返时间)
Redis提供了批量操作命令,有效的节约了RTT,但是大部分命令时不支持批量操作的,仍需要消耗n次RTT,Pipeline(流水线)机制能改善该问题,它能将一组Redis命令进行组装,通过一次RTT传输给Redis,再将结果按顺序返回给客户端,整个过程只需要消耗一次RTT。
redis-cli的--pipe选项实际就是使用Pipeline机制。
如: echo -en '*3\r\n$3\r\nSET\r\n$3\r\nkey\r\n$5\r\nvalue\r\n' | redis-cli --pipe
原生批量命令与Pipeline对比
注:Pipeline虽然好用,但是每次组装的命令不能没有节制,否则一次组装Pipeline数据量过大,一方面会增加客户端的等待时间,另一方面会造成网络阻塞。可以将一次包含大量命令的Pipeline拆分成多个较小的Pipeline来完成。