当前位置:网站首页>Redis入门完整教程:Redis Shell
Redis入门完整教程:Redis Shell
2022-07-04 22:29:00 【谷哥学术】
Redis提供了redis-cli、redis-server、redis-benchmark等Shell工具。它们
虽然比较简单,但是麻雀虽小五脏俱全,有时可以很巧妙地解决一些问题。
3.2.1 redis-cli详解
第1章曾介绍过redis-cli,包括-h、-p参数,但是除了这些参数,还有很
多有用的参数,要了解redis-cli的全部参数,可以执行redis-cli-help命令来进
行查看,下面将对一些重要参数的含义以及使用场景进行说明。
1.-r
-r(repeat)选项代表将命令执行多次,例如下面操作将会执行三次ping
命令:
redis-cli -r 3 ping
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毫秒执行
一次,可以用-i0.01,例如:
$ redis-cli -r 5 -i 0.01 ping
PONG
PONG
PONG
PONG
PONG
例如下面的操作利用-r和-i选项,每隔1秒输出内存的使用量,一共输出
100次:
redis-cli -r 100 -i 1 info | grep used_memory_human
used_memory_human:2.95G
used_memory_human:2.95G
......................
used_memory_human:2.94G
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异常,有关Redis Cluster将在第10章介绍。
5.-a
如果Redis配置了密码,可以用-a(auth)选项,有了这个选项就不需要
手动输入auth命令。
6.--scan和--pattern
--scan选项和--pattern选项用于扫描指定模式的键,相当于使用scan命
令。
7.--slave
--slave选项是把当前客户端模拟成当前Redis节点的从节点,可以用来
获取当前Redis节点的更新操作,有关于Redis复制将在第6章进行详细介
绍。合理的利用这个选项可以记录当前连接Redis节点的一些更新操作,这
些更新操作很可能是实际开发业务时需要的数据。
下面开启第一个客户端,使用--slave选项,看到同步已完成:
$ redis-cli --slave
SYNC with master, discarding 72 bytes of bulk transfer...
SYNC done. Logging commands from master.
再开启另一个客户端做一些更新操作:
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
1
127.0.0.1:6379> get hello
"world"
第一个客户端会收到Redis节点的更新操作:
redis-cli --slave
SYNC with master, discarding 72 bytes of bulk transfer...
SYNC done. Logging commands from master.
"PING"
"PING"
"PING"
"PING"
"PING"
"SELECT","0"
"set","hello","world"
"set","a","b"
"PING"
"incr","count"
注意
PING命令是由于主从复制产生的,第6章会对主从复制进行介绍。
8.--rdb
--rdb选项会请求Redis实例生成并发送RDB持久化文件,保存在本地。
可使用它做持久化文件的定期备份。有关Redis持久化将在第5章进行详细介
绍。
9.--pipe
--pipe选项用于将命令封装成Redis通信协议定义的数据格式,批量发送
给Redis执行,有关Redis通信协议将在第4章进行详细介绍,例如下面操作
同时执行了set hello world和incr counter两条命令:
echo -en '*3\r\n$3\r\nSET\r\n$5\r\nhello\r\n$5\r\nworld\r\n*2\r\n$4\r\nincr\r\
n$7\r\ncounter\r\n' | redis-cli --pipe
10.--bigkeys
--bigkeys选项使用scan命令对Redis的键进行采样,从中找到内存占用比
较大的键值,这些键可能是系统的瓶颈。
11.--eval
--eval选项用于执行指定Lua脚本,有关Lua脚本的使用将在3.4节介绍。
12.--latency
latency有三个选项,分别是--latency、--latency-history、--latency-dist。
它们都可以检测网络延迟,对于Redis的开发和运维非常有帮助。
(1)--latency
该选项可以测试客户端到目标Redis的网络延迟,例如当前拓扑结构如
图3-4所示。客户端B和Redis在机房B,客户端A在机房A,机房A和机房B是
跨地区的。
客户端B:
redis-cli -h {machineB} --latency
min: 0, max: 1, avg: 0.07 (4211 samples)
客户端A:
redis-cli -h {machineB} --latency
min: 0, max: 2, avg: 1.04 (2096 samples)
可以看到客户端A由于距离Redis比较远,平均网络延迟会稍微高一些。
(2)--latency-history
--latency的执行结果只有一条,如果想以分时段的形式了解延迟信息,
可以使用--latency-history选项:
redis-cli -h 10.10.xx.xx --latency-history
min: 0, max: 1, avg: 0.28 (1330 samples) -- 15.01 seconds range …
min: 0, max: 1, avg: 0.05 (1364 samples) -- 15.01 seconds range
可以看到延时信息每15秒输出一次,可以通过-i参数控制间隔时间。
(3)--latency-dist
该选项会使用统计图表的形式从控制台输出延迟统计信息。
13.--stat
--stat选项可以实时获取Redis的重要统计信息,虽然info命令中的统计信
息更全,但是能实时看到一些增量的数据(例如requests)对于Redis的运维
还是有一定帮助的,如下所示:
redis-cli --stat
------- data ------ --------------------- load -------------------- - child -
keys mem clients blocked requests connections
2451959 3.43G 1162 0 7426132839 (+0) 1337356
2451958 3.42G 1162 0 7426133645 (+806) 1337356 …
2452182 3.43G 1161 0 7426150275 (+1303) 1337356
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 你好
3.2.2 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/ and http:// pyropus.ca/software/memtester/
................ 忽略检测细节 ................
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实例时都执行--test-memory选项,该功能更偏向
于调试和测试,例如,想快速占满机器内存做一些极端条件的测试,这个功
能是一个不错的选择。
3.2.3 redis-benchmark详解
redis-benchmark可以为Redis做基准性能测试,它提供了很多选项帮助开
发和运维人员测试Redis的相关性能,下面分别介绍这些选项。
1.-c
-c(clients)选项代表客户端的并发数量(默认是50)。
2.-n<requests>
-n(num)选项代表客户端请求总量(默认是100000)。
例如redis-benchmark-c100-n20000代表100各个客户端同时请求Redis,一
共执行20000次。redis-benchmark会对各类数据结构的命令进行测试,并给
出性能指标:
====== GET ======
20000 requests completed in 0.27 seconds
100 parallel clients
3 bytes payload
keep alive: 1
99.11% <= 1 milliseconds
100.00% <= 1 milliseconds
73529.41 requests per second
例如上面一共执行了20000次get操作,在0.27秒完成,每个请求数据量
是3个字节,99.11%的命令执行时间小于1毫秒,Redis每秒可以处理
73529.41次get请求。
3.-q
-q选项仅仅显示redis-benchmark的requests per second信息,例如:
$redis-benchmark -c 100 -n 20000 -q
PING_INLINE: 74349.45 requests per second
PING_BULK: 68728.52 requests per second
SET: 71174.38 requests per second …
LRANGE_500 (first 450 elements): 11299.44 requests per second
LRANGE_600 (first 600 elements): 9319.67 requests per second
MSET (10 keys): 70671.38 requests per second
4.-r
在一个空的Redis上执行了redis-benchmark会发现只有3个键:
127.0.0.1:6379> dbsize
(integer) 3
127.0.0.1:6379> keys *
1) "counter:__rand_int__"
2) "mylist"
3) "key:__rand_int__"
如果想向Redis插入更多的键,可以执行使用-r(random)选项,可以向
Redis插入更多随机的键。
$redis-benchmark -c 100 -n 20000 -r 10000
-r选项会在key、counter键上加一个12位的后缀,-r10000代表只对后四
位做随机处理(-r不是随机数的个数)。例如上面操作后,key的数量和结
果结构如下:
127.0.0.1:6379> dbsize
(integer) 18641
127.0.0.1:6379> scan 0
1) "14336"
2) 1) "key:000000004580"
2) "key:000000004519"
…
10) "key:000000002113"
5.-P
-P选项代表每个请求pipeline的数据量(默认为1)。
6.-k<boolean>
-k选项代表客户端是否使用keepalive,1为使用,0为不使用,默认值为
1。
7.-t
-t选项可以对指定命令进行基准测试。
redis-benchmark -t get,set -q
SET: 98619.32 requests per second
GET: 97560.98 requests per second
8.--csv
--csv选项会将结果按照csv格式输出,便于后续处理,如导出到Excel
等。
redis-benchmark -t get,set --csv
"SET","81300.81"
"GET","79051.38"
边栏推荐
- Google Earth Engine(GEE)——基于 MCD64A1 的 GlobFire 日常火灾数据集
- 攻防世界 MISC 进阶区 Ditf
- 攻防世界 MISC 进阶 glance-50
- 【烹饪记录】--- 青椒炒千张
- 堆排序代码详解
- LOGO特训营 第一节 鉴别Logo与Logo设计思路
- Serial port data frame
- Prosperity is exhausted, things are right and people are wrong: where should personal webmasters go
- Breakpoint debugging under vs2019 c release
- Locust performance test - environment construction and use
猜你喜欢
Persistence mechanism of redis
The new version judges the code of PC and mobile terminal, the mobile terminal jumps to the mobile terminal, and the PC jumps to the latest valid code of PC terminal
LOGO特训营 第二节 文字与图形的搭配关系
Sobel filter
Domestic database chaos
The Sandbox 和数字好莱坞达成合作,通过人力资源开发加速创作者经济的发展
sobel过滤器
Advanced area a of attack and defense world misc Masters_ good_ idea
The sandbox has reached a cooperation with digital Hollywood to accelerate the economic development of creators through human resource development
UML diagram memory skills
随机推荐
Lost in the lock world of MySQL
Hit the core in the advanced area of misc in the attack and defense world
MySQL Architecture - user rights and management
MYSQL架构——逻辑架构
攻防世界 MISC 進階區 Erik-Baleog-and-Olaf
Mysql root 账号如何重置密码
Redis sentinel simply looks at the trade-offs between distributed high availability and consistency
LOGO special training camp section I identification logo and Logo Design Ideas
Li Kou 98: verify binary search tree
【lua】int64的支持
关于栈区、堆区、全局区、文字常量区、程序代码区
攻防世界 MISC 进阶区 can_has_stdio?
MySQL Architecture - logical architecture
[roommate learned to use Bi report data processing in the time of King glory in one game]
10 schemes to ensure interface data security
繁華落盡、物是人非:個人站長該何去何從
【室友用一局王者荣耀的时间学会了用BI报表数据处理】
Persistence mechanism of redis
In Linux, I call odspcmd to query the database information. How to output silently is to only output values. Don't do this
啃下大骨头——排序(二)