-
参考:
- 1.《Redis开发与运维》
- 2. https://segmentfault.com/a/1190000009811404
Redis Shell
Redis Shell
Redis提供了redis-cli
、redis-server
、redis-benchmark
等Shell工具。它们虽然比较简单,但是麻雀虽小五脏俱全,有时可以很巧妙地解决一些问题。
redis-cli
帮助:redis-cli --help
redis-cli 3.2.6
Usage: redis-cli [OPTIONS] [cmd [arg [arg ...]]]
-h <hostname> 服务端 hostname (默认 127.0.0.1)
-p <port> 服务端 端口 (默认 6379)
-s <socket> 服务端 socket (会覆盖 -h -p 设置的内容)
-a <password> 密码(密码错误之类不会直接保错,而是在操作时才会保错,这时可以使用 Redis 的 AUTH 命令再次认证)
-r <repeat> 重复执行特定命令 repeat 次
-i <interval> 每隔几秒执行一次,-i 必须与 -r 同时使用,-r 设置的是执行的总次数
-n <db> 选择操作的数据库,相当于在进入客户端后使用 SELECT 命令
-x -x 选项代表从标准输入(stdin)读取数据作为 redis-cli 的最后一个参数
-d <delimiter> 多行语句分隔符设定(默认 \n)
-c -c(cluster)选项是连接 Redis Cluster 节点时需要使用的,-c选项可以防止moved和ask异常。
--raw 返回结果必须是原始的格式
--no-raw 返回格式化后的结果
--csv 输出使用 CSV 格式
--stat 滚动打印关于服务端中 内存、客户端等 统计信息
--latency 滚动打印关于服务端中 内存、客户端等 统计信息
--latency-history 与 --latency 类似但是随着时间的推移跟踪延迟的变化。迭代时间默认是 15 秒 可以使用 -i 参数进行设置。
--latency-dist 与 --latency 类似但是随着时间的推移跟踪延迟的变化。迭代时间默认是 15 秒 可以使用 -i 参数进行设置。
--lru-test <keys> 模拟 LRU 算法的一个二八分布的缓存的工作量
--slave 把当前客户端模拟成当前 Redis 节点的从节点,可以用来获取当前Redis 节点的更新操作。合理的利用这个选项可以记录当前连接Redis节点的一些更新操作
--rdb <filename> 会请求 Redis 实例生成并发送 RDB 持久化文件,保存在本地。
--pipe 用于将命令封装成Redis通信协议定义的数据格式,批量发送给 Redis 执行。
--pipe-timeout <n> 类似 --pipe 只是添加了一个超时处理
--bigkeys 使用SCAN命令对 Redis 的键进行采样,从中找到内存占用比较大的键值。这些键可能是系统的瓶颈,通过该命令我们可以找到这些瓶颈。
--scan 使用 SCAN 命令查询所有 key
--pattern <pat> 配合 --scan 命令扫描指定模式的键
--intrinsic-latency 运行一个测试来衡量内在的系统延迟。测试将运行指定的秒。
--eval <file> 发送一个 EVAL 命令执行 <file> 中的 Lua 脚本
--ldb 配合 --eval 使用,允许调试 Redis 中的 Lua 脚本
--ldb-sync-mode 像 --ldb 采用同步的 Lua 调试器,在这种模式下,服务端将会阻塞,脚本改变的内容是不会从服务端内存回滚的。
--help 输出帮助信息并退出 可以简化为 -h
--version 输出 Redis 版本信息并退出 可以简化为 -v
Examples:
cat /etc/passwd | redis-cli -x set mypasswd
redis-cli get mypasswd
redis-cli -r 100 lpush mylist x
redis-cli -r 100 -i 1 info | grep used_memory_human:
redis-cli --eval myscript.lua key1 key2 , arg1 arg2 arg3
redis-cli --scan --pattern '*:12345*'
redis-server
redis-server 除了启动 Redis 外,还有一个–test-memory 选项。redis-server --test-memory 可以用来检测当前操作系统能否稳定地分配指定容量的内存给Redis,通过这种检测可以有效避免因为内存问题造成Redis崩溃,例如下面操作检测当前操作系统能否提供1G的内存给 Redis:
redis-server --test-memory 1024
整个内存检测的时间比较长(我测试时使用的实际超出一个小时)。当输出 passed this test 时说明内存检测完毕,最后会提示 --test-memory 只是简单检测,如果质疑可以使用更加专业的内存检测工具。
Please keep the test running several minutes per GB of memory.
Also check
http://www.memtest86.com/
http://pyropus.ca/software/memtester/
该功能更偏向于测试,例如:想快速占满机器内存做一些极端条件的测试,这个功能是个不错的选择。
redis-benchmark
redis-benchmark 可以为 Redis 做基准性能测试。它提供了很多选项帮助开发和运维人员测试Redis的相关性能。
redis-benchmark --help
Usage: redis-benchmark [-h <host>] [-p <port>] [-c <clients>] [-n <requests]> [-k <boolean>]
-h <hostname> 服务端 hostname (默认 127.0.0.1)
-p <port> 服务端 端口 (默认 6379)
-s <socket> 服务端 socket (会覆盖 -h -p 设置的内容)
-a <password> 密码(密码错误之类不会直接保错,而是在操作时才会保错,这时可以使用 Redis 的 AUTH 命令再次认证)
-c <clients> 客户端的并发数量(默认是50)
-n <requests> 客户端请求总量(默认是100000)
-d <size> 使用 SET/GET 添加的数据的字节大小 (默认 2)
-dbnum <db> 选择一个数据库进行测试 (默认 0)
-k <boolean> 客户端是否使用keepalive,1为使用,0为不使用,(默认为 1)
-r <keyspacelen> 使用 SET/GET/INCR 命令添加数据 key, SADD 添加随机数据,keyspacelen 指定的是添加 键的数量
-P <numreq> 每个请求 pipeline 的数据量(默认为1,没有 pipeline )
-e 如果服务器回复错误,在stdout上显示它们。
(每秒显示不超过1个错误)
-q 仅仅显示redis-benchmark的requests per second信息
--csv 将结果按照csv格式输出
-l 循环测试
-t <tests> 可以对指定命令进行基准测试
-I 空闲模式。 只需打开N个空闲连接并等待。
Examples:
使用默认配置运行基准测试 127.0.0.1:6379:
$ redis-benchmark
使用20个并行客户端,总共100k个请求 192.168.1.1:
$ redis-benchmark -h 192.168.1.1 -p 6379 -n 100000 -c 20
仅使用SET测试填充127.0.0.1:6379约100万个键::
$ redis-benchmark -t set -n 1000000 -r 100000000
Benchmark 127.0.0.1:6379 for a few commands producing CSV output:
$ redis-benchmark -t ping,set,get -n 100000 --csv
Benchmark a specific command line:
$ redis-benchmark -r 10000 -n 10000 eval 'return redis.call("ping")' 0
Fill a list with 10000 random elements:
$ redis-benchmark -r 10000 -n 10000 lpush mylist __rand_int__
On user specified command lines __rand_int__ is replaced with a random integer
with a range of values selected by the -r option.