Redis Shell

原创 2017年09月19日 12:08:22

Redis提供了redis-cli、redis-server、redis-benchmark等Shell工具。它们虽然比较简单,但是麻雀虽小五脏俱全,有时可以很巧妙地解决一些问题。

Redis提供了redis-cli、redis-server、redis-benchmark等Shell工具。它们虽然比较简单,但是麻雀虽小五脏俱全,有时可以很巧妙地解决一些问题。

redis-cli详解

用法: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 返回结果必须是原始的格式
--noraw 返回格式化后的结果
--csv 输出使用 CSV 格式
--stat 滚动打印关于服务端中 内存、客户端等 统计信息
--latency 进入一个特殊模式连续显示客户端到目标 Redis 的网络延迟信息。
--latency-history 与 –latency 类似但是随着时间的推移跟踪延迟的变化。迭代时间默认是 15 秒 可以使用 -i 参数进行设置。
--latency-dist 终端 256 色谱的方式显示延时信息。迭代时间默认是 1 秒 可以使用 -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 <sec> 运行一个测试来衡量内在的系统延迟。测试将运行指定的秒。
--eval <file> 发送一个 EVAL 命令执行 <file> 中的 Lua 脚本
--ldb 配合 –eval 使用,允许调试 Redis 中的 Lua 脚本
--ldb-sync-mode 像 –ldb 采用同步的 Lua 调试器,在这种模式下,服务端将会阻塞,脚本改变的内容是不会从服务端内存回滚的。
--help 输出帮助信息并退出 可以简化为 -h
--version 输出 Redis 版本信息并退出 可以简化为 -v

示例:

# 在命令行工具中直接 SET 一个 incrTest 
coderknock:CMD> redis-cli -a admin123 SET incrTest 0
# 循环 5 次 为 incrTest 自增
coderknock:CMD> redis-cli -a admin123 -r 5 INCR incrTest
(integer) 1
(integer) 2
(integer) 3
(integer) 4
(integer) 5
coderknock:CMD>redis-cli -a admin123 GET incrTest
"5"

coderknock:CMD> redis-cli -a admin123 -r 5 INCR incrTest
(integer) 1
(integer) 2
(integer) 3
(integer) 4
(integer) 5

-i <interval> 的使用:

<code>-i <interval></code> 的使用

-x 的使用:

# 注意这里的 SET 最后没有指定值
coderknock:CMD>echo "hello" | redis-cli -a admin123 -x GET lastStdin
OK
coderknock:CMD> redis-cli -a admin123 GET lastStdin
"\"hello\" \n"
coderknock:CMD>

--raw 使用:

coderknock:CMD>redis-cli -a admin123   --raw
127.0.0.1:6379> KEYS *
中文
lastStdin
zSet
s1
incrTest
set
coderknock:CMD>redis-cli -a admin123
# 这里第一个 key 中文是乱码的
127.0.0.1:6379> KEYS *
1) "\xd6\xd0\xce\xc4"
2) "lastStdin"
3) "zSet"
4) "s1"
5) "incrTest"
6) "set"

--csv 使用:

coderknock:CMD>redis-cli -a admin123  --csv
127.0.0.1:6379> KEYS *
"\xd6\xd0\xce\xc4","lastStdin","zSet","s1","incrTest","set"
# 下面的示例说明 -- 参数只有最后一个生效
coderknock:CMD>redis-cli -a admin123  --csv --raw
127.0.0.1:6379> KEYS *
中文
lastStdin
zSet
s1
incrTest
set
coderknock:CMD>redis-cli -a admin123  --csv --no-raw
127.0.0.1:6379> KEYS *
1) "\xd6\xd0\xce\xc4"
2) "lastStdin"
3) "zSet"
4) "s1"
5) "incrTest"
6) "set"
coderknock:CMD>redis-cli -a admin123   --no-raw --csv
127.0.0.1:6379> KEYS *
"\xd6\xd0\xce\xc4","lastStdin","zSet","s1","incrTest","set"

--stat 使用:

--stat 使用

--latency 使用:

--latency 使用

--latency-history--latency 类似,但是每隔一段时间会记录一次:

--latency-history 的使用

--latency-dist 使用(第一张是 Windows 显示,没有效果,第二张是 Linux 下有颜色效果):

--latency-dist 使用 (Windows):

--latency-dist 使用 Windows

--latency-dist 使用 (Linux):

--latency-dist 使用 Linux

--lru-test 使用:

--lru-test 使用

--intrinsic-latency <sec> 使用:

--intrinsic-latency <sec> 使用

--bigkeys 使用:

coderknock:CMD>redis-cli -a admin123 --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 'lastStdin' with 9 bytes
[00.00%] Biggest set    found so far 'set' with 3 members
[00.00%] Biggest zset   found so far 'zSet' with 2 members

-------- summary -------

Sampled 8 keys in the keyspace!
Total key length in bytes is 40 (avg len 5.00)

Biggest string found 'lastStdin' has 9 bytes
Biggest    set found 'set' has 3 members
Biggest   zset found 'zSet' has 2 members

6 strings with 24 bytes (75.00% of keys, avg size 4.00)
0 lists with 0 items (00.00% of keys, avg size 0.00)
1 sets with 3 members (12.50% of keys, avg size 3.00)
0 hashs with 0 fields (00.00% of keys, avg size 0.00)
1 zsets with 2 members (12.50% of keys, avg size 2.00)

--scan 使用:

coderknock:CMD>redis-cli -a admin123 --scan
lastStdin
set
zSet
s1
incrTest
Test
ᅱ￐ᅫᅣ
lru:0

--scan 配合 --pattern 使用:

coderknock:CMD>redis-cli -a admin123 --scan  in*
incrTest

--version (-v) 使用:

coderknock:CMD>redis-cli -a admin123 --version
redis-cli 3.2.100

--help (-h) 使用:

coderknock:CMD>redis-cli -a admin123 --help
redis-cli 3.2.100

Usage: redis-cli [OPTIONS] [cmd [arg [arg ...]]]
  -h <hostname>      Server hostname (default: 127.0.0.1).
  -p <port>          Server port (default: 6379).
  -s <socket>        Server socket (overrides hostname and port).
  -a <password>      Password to use when connecting to the server.
  -r <repeat>        Execute specified command N times.
  -i <interval>      When -r is used, waits <interval> seconds per command.
                     It is possible to specify sub-second times like -i 0.1.
  -n <db>            Database number.
  -x                 Read last argument from STDIN.
  -d <delimiter>     Multi-bulk delimiter in for raw formatting (default: \n).
  -c                 Enable cluster mode (follow -ASK and -MOVED redirections).
  --raw              Use raw formatting for replies (default when STDOUT is
                     not a tty).
  --no-raw           Force formatted output even when STDOUT is not a tty.
  --csv              Output in CSV format.
  --stat             Print rolling stats about server: mem, clients, ...
  --latency          Enter a special mode continuously sampling latency.
  --latency-history  Like --latency but tracking latency changes over time.
                     Default time interval is 15 sec. Change it using -i.
  --latency-dist     Shows latency as a spectrum, requires xterm 256 colors.
                     Default time interval is 1 sec. Change it using -i.
  --lru-test <keys>  Simulate a cache workload with an 80-20 distribution.
  --slave            Simulate a slave showing commands received from the master.
  --rdb <filename>   Transfer an RDB dump from remote server to local file.
  --pipe             Transfer raw Redis protocol from stdin to server.
  --pipe-timeout <n> In --pipe mode, abort with error if after sending all data.
                     no reply is received within <n> seconds.
                     Default timeout: 30. Use 0 to wait forever.
  --bigkeys          Sample Redis keys looking for big keys.
  --scan             List all keys using the SCAN command.
  --pattern <pat>    Useful with --scan to specify a SCAN pattern.
  --intrinsic-latency <sec> Run a test to measure intrinsic system latency.
                     The test will run for the specified amount of seconds.
  --eval <file>      Send an EVAL command using the Lua script at <file>.
  --ldb              Used with --eval enable the Redis Lua debugger.
  --ldb-sync-mode    Like --ldb but uses the synchronous Lua debugger, in
                     this mode the server is blocked and script changes are
                     are not rolled back from the server memory.
  --help             Output this help and exit.
  --version          Output version and exit.

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*'

  (Note: when using --eval the comma separates KEYS[] from ARGV[] items)

When no command is given, redis-cli starts in interactive mode.
Type "help" in interactive mode for information on available commands
and settings.

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 只是简单检测,如果质疑可以使用更加专业的内存检测工具,下面是我测试的结果:

Your memory passed this test.
Please if you are still in doubt use the following two tools:
1) memtest86: http://www.memtest86.com/
2) memtester: http://pyropus.ca/software/memtester/

redis-benchmark详解

redis-benchmark 可以为 Redis 做基准性能测试。

用法 redis-benchmark [-h <host>][-p ] [-c <clients>][-n ]> [-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 )
-q 仅仅显示redis-benchmark的requests per second信息
--csv 将结果按照csv格式输出,便于后续处理
-l 循环测试
-t <tests> 可以对指定命令进行基准测试
-I Idle mode. Just open N idle connections and wait.

redis-benchmark -c 100 -n 20000

redis-benchmark -c 100 -n 20000 代表100各个客户端同时请求 Redis,一
共执行 20000 次。redis-benchmark会对各类数据结构的命令进行测试,并给
出性能指标:

redis-benchmark -c 100 -n 20000 使用

下面我们详细介绍性能测试的报告内容:

C:\Users\zylia>redis-benchmark -c 100 -n 20000
# 执行的测试命令
====== PING_INLINE ======
  # 这里说明 在 0.62 秒内完成了 20000 ping 请求
  20000 requests completed in 0.62 seconds
  # 100 个并发客户端
  100 parallel clients
  # 每个请求数据量是3个字节
  3 bytes payload
  keep alive: 1

# 小于等于指定毫秒数的比率
0.01% <= 1 milliseconds
0.08% <= 2 milliseconds
50.30% <= 3 milliseconds
99.19% <= 4 milliseconds
99.85% <= 5 milliseconds
99.92% <= 6 milliseconds
99.97% <= 7 milliseconds
100.00% <= 7 milliseconds

#每秒处理命令数量
32154.34 requests per second

-q 使用

C:\Users\zylia>redis-benchmark -c 100 -n 20000  -q
PING_INLINE: 32206.12 requests per second
PING_BULK: 32310.18 requests per second
SET: 32362.46 requests per second
GET: 32679.74 requests per second
INCR: 24539.88 requests per second
LPUSH: 32102.73 requests per second
RPUSH: 32679.74 requests per second
LPOP: 32840.72 requests per second
RPOP: 32733.22 requests per second
SADD: 31746.03 requests per second
SPOP: 31796.50 requests per second
LPUSH (needed to benchmark LRANGE): 29368.58 requests per second
LRANGE_100 (first 100 elements): 27932.96 requests per second
LRANGE_300 (first 300 elements): 32051.28 requests per second
LRANGE_500 (first 450 elements): 32573.29 requests per second
LRANGE_600 (first 600 elements): 32102.73 requests per second
MSET (10 keys): 31595.58 requests per second

-t --csv 使用

# 没有设置客户端以及并发数,这里会使用默认的数值
C:\Users\zylia>redis-benchmark -t get,set --csv
"SET","31595.58"
"GET","31796.50"

我是广告

本人 Redis 方面的讲座已经上线快去看看有没有你感兴趣的吧(说不定会有优惠哟~~数量有限要抓紧呀):

[Spring Boot + Redis 实现 论坛系统之项目整体规划] (https://segmentfault.com/l/1500000010993497) 10月9日之前有99份优惠名额,有兴趣的同学赶快入手吧

提升职业竞争力的必备知识 Redis 之初识

提升职业竞争力的必备知识 Redis 之高级特性

提升职业竞争力的必备知识 Redis 之缓存与Session共享

提升职业竞争力的必备知识 Redis 之排行榜与附近的人

以上课程现在可以打包购买了 Redis 系列讲座合集
打包购买更实惠

版权声明:本文为博主原创文章,转载请标注出处

Redis Shell

Redis提供了redis-cli、redis-server、redis-benchmark等Shell工具。它们虽然比较简单,但是麻雀虽小五脏俱全,有时可以很巧妙地解决一些问题。Redis提供了re...

Redis 通信协议

简介几乎所有的主流编程语言都有Redis的客户端(http://redis.io/clients),不考虑Redis非常流行的原因,如果站在技术的角度看原因还有两个: 客户端与服务端之间的通信协议是在...

ISP库使用redis格式转换shell脚本

  • 2015年09月11日 12:49
  • 2KB
  • 下载

一行shell查看redis 连接数分布

背景线上某个redis连接数过万,老报警,于是产生刚需:快速知道某个redis的client分布. 用于快速找出连接数占用最多的客户端.shell习惯python的老司机处理这点小事,那还不是手到擒...
  • secretx
  • secretx
  • 2017年06月20日 14:45
  • 3841

shell 例程 —— 解决redis读取稳定性

问题背景: php读取线上redis数据,经常不稳定,数据响应时有时无。 解决方法:多次读取,每次读取所有上一次没读出的数据,直到全部获取。 本文实现用shell进行多次redis数据读取, 每次...

redhat下使用mysql,python,redis,httpsqs,shell脚本开机自启动的一些问题与解决

先给上一些网址,里面有各种问题与解决 1. httpsqs官方网址 2. python安装与使用mysql 3.mysql插入数据时:Incorrect string value 4.mysql显示中...
  • zlp1992
  • zlp1992
  • 2015年03月24日 20:36
  • 937

nagios监控redis内存使用情况脚本--shell实现

!/bin/bash# # NORMAL_MSG=”redis_memory is OK!” WARONG_MSG=”redis_memory is WARONG!!” CRITICAL_MS...

Redis Shell命令行操作五种value数据类型

基本命令及String类型 Hash类型 List类型 Set类型 SortedSet类型 键的生存时间 发布与订阅 清除数据Redis Shell命令行操作五种value数据类型Redis使用键值存...
  • sl1992
  • sl1992
  • 2016年12月13日 17:33
  • 246

redis-desktop-manager(Mac)

  • 2017年12月07日 21:17
  • 14.45MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Redis Shell
举报原因:
原因补充:

(最多只允许输入30个字)