Redis 命令行接口 redis-cli
完全指南
Redis (Remote Dictionary Server) 是一个开源的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。以其高性能、丰富的数据结构和简单性而闻名。与 Redis 服务器交互最直接、最常用的方式就是通过其官方的命令行接口(Command Line Interface, CLI)—— redis-cli
。
redis-cli
不仅仅是一个简单的命令执行工具,它提供了丰富的功能,包括交互式命令输入、脚本执行、服务器监控、数据导入导出、集群管理等。无论你是 Redis 的初学者还是经验丰富的开发者或运维人员,深入理解和熟练使用 redis-cli
都是至关重要的。本指南旨在全面、深入地介绍 redis-cli
的各个方面,助你成为 redis-cli
的使用高手。
1. redis-cli
简介与安装
redis-cli
是 Redis 发行包中自带的一个客户端工具。通常,当你安装 Redis 服务器时,redis-cli
也会被一同安装在系统的可执行路径下。
验证安装:
打开你的终端或命令提示符,输入以下命令:
bash
redis-cli --version
如果安装成功,它将显示 redis-cli
的版本号,通常与你安装的 Redis 服务器版本一致。
基本启动:
最简单的启动方式是直接在终端输入:
bash
redis-cli
默认情况下,redis-cli
会尝试连接到本地(127.0.0.1
)的默认 Redis 端口(6379
)。如果连接成功,你将看到一个类似下面的提示符,表示已进入交互模式:
127.0.0.1:6379>
2. 连接 Redis 服务器
redis-cli
提供了多个选项来连接到不同的 Redis 实例或进行身份验证。
连接指定主机和端口:
如果你的 Redis 服务器运行在不同的主机或端口上,可以使用 -h
(hostname) 和 -p
(port) 选项:
“`bash
redis-cli -h
示例: 连接到 192.168.1.100 的 6380 端口
redis-cli -h 192.168.1.100 -p 6380
“`
使用密码进行身份验证:
如果 Redis 服务器设置了密码(通过 requirepass
配置),连接时需要提供密码。有几种方式:
-
-a <password>
选项: 直接在命令行中提供密码。注意: 这会将密码暴露在进程列表和历史记录中,不推荐在生产环境或共享系统中使用。bash
redis-cli -h <hostname> -p <port> -a <password> -
--pass <password>
或--password <password>
: 作用同-a
,同样存在安全风险。 -
--askpass
选项: 启动redis-cli
时会提示你交互式地输入密码,密码不会显示在屏幕上,也不会记录在历史中,相对安全。bash
redis-cli -h <hostname> -p <port> --askpass
Password: (在此处输入密码) -
连接后使用
AUTH
命令: 先不带密码连接,然后在redis-cli
提示符下使用AUTH
命令进行认证。bash
redis-cli -h <hostname> -p <port>
<hostname>:<port>> AUTH <password>
OK
<hostname>:<port>> -
通过环境变量
REDISCLI_AUTH
: 设置该环境变量后,redis-cli
会自动使用该值作为密码。“`bash
export REDISCLI_AUTH=’yourpassword’
redis-cli -h-p 无需再输入密码
“`
连接 Unix 套接字:
如果 Redis 服务器配置为监听 Unix 套接字(通常用于本地连接,比 TCP 连接更快),可以使用 -s
选项指定套接字文件路径:
bash
redis-cli -s /tmp/redis.sock
选择数据库:
Redis 支持多个数据库(默认 0-15)。可以使用 -n <db_number>
选项在连接时直接选择数据库:
bash
redis-cli -n 1 # 连接到数据库 1
也可以在进入交互模式后,使用 SELECT <db_number>
命令切换数据库:
127.0.0.1:6379> SELECT 1
OK
127.0.0.1:6379[1]> # 提示符会显示当前数据库编号
测试连接:
连接成功后,最常用的测试命令是 PING
。如果服务器正常,它会返回 PONG
:
127.0.0.1:6379> PING
PONG
你也可以带一个参数 PING "hello"
,服务器会原样返回:
127.0.0.1:6379> PING "hello redis"
"hello redis"
3. 交互模式详解
交互模式是 redis-cli
最常用的工作方式。在此模式下,你可以直接输入 Redis 命令并立即看到结果。
提示符:
默认提示符显示连接的主机和端口,如果切换了数据库,还会显示数据库编号,如 127.0.0.1:6379[1]>
。
命令输入与自动补全:
直接输入 Redis 命令,按 Enter 执行。redis-cli
支持 Tab 键自动补全命令。输入命令的前几个字母,按 Tab 键,它会尝试补全命令名。如果存在多个匹配项,再次按 Tab 会列出所有可能的选项。
127.0.0.1:6379> S<TAB> # 按下 Tab
SCAN SCRIPT SET SETBIT SETEX SETNX SETRANGE SHUTDOWN SLAVEOF SLOWLOG SORT SPOP SPUBLISH SRANDMEMBER SREM STRLEN SUBSCRIBE SUNSUBSCRIBE SWAPDB
127.0.0.1:6379> SE<TAB> # 输入 SE 后按 Tab
SELECT SET SETBIT SETEX SETNX SETRANGE
127.0.0.1:6379> SET <TAB> # 输入 SET 和空格后按 Tab,会提示参数 (部分版本支持)
命令历史:
redis-cli
会记录你输入的命令历史。使用键盘的向上(↑)和向下(↓)箭头可以在历史命令中导航。历史记录默认保存在用户主目录下的 .rediscli_history
文件中。
常用命令示例 (按数据类型):
-
Strings (字符串):
127.0.0.1:6379> SET mykey "Hello Redis" # 设置键值
OK
127.0.0.1:6379> GET mykey # 获取键值
"Hello Redis"
127.0.0.1:6379> APPEND mykey " World" # 追加值
(integer) 18 # 返回追加后字符串的总长度
127.0.0.1:6379> GET mykey
"Hello Redis World"
127.0.0.1:6379> STRLEN mykey # 获取字符串长度
(integer) 18
127.0.0.1:6379> SET counter 10 # 设置数字字符串
OK
127.0.0.1:6379> INCR counter # 原子自增 1
(integer) 11
127.0.0.1:6379> DECR counter # 原子自减 1
(integer) 10
127.0.0.1:6379> INCRBY counter 5 # 原子增加指定值
(integer) 15 -
Lists (列表): (按插入顺序排序的字符串集合)
127.0.0.1:6379> LPUSH mylist "world" # 从左侧推入元素
(integer) 1
127.0.0.1:6379> LPUSH mylist "hello"
(integer) 2
127.0.0.1:6379> RPUSH mylist "!" # 从右侧推入元素
(integer) 3
127.0.0.1:6379> LRANGE mylist 0 -1 # 获取列表所有元素 (0 到 最后一个)
1) "hello"
2) "world"
3) "!"
127.0.0.1:6379> LLEN mylist # 获取列表长度
(integer) 3
127.0.0.1:6379> LPOP mylist # 从左侧弹出一个元素
"hello"
127.0.0.1:6379> RPOP mylist # 从右侧弹出一个元素
"!"
127.0.0.1:6379> LRANGE mylist 0 -1
1) "world" -
Hashes (哈希/字典): (键值对的无序集合)
127.0.0.1:6379> HSET myhash field1 "Value1" # 设置哈希字段值 (Redis 4.0 以前用 HMSET)
(integer) 1 # 返回成功设置的字段数量
127.0.0.1:6379> HSET myhash field2 "Value2" field3 "Value3" # 一次设置多个
(integer) 2
127.0.0.1:6379> HGET myhash field1 # 获取单个字段的值
"Value1"
127.0.0.1:6379> HMGET myhash field1 field3 non_exist_field # 获取多个字段的值
1) "Value1"
2) "Value3"
3) (nil) # 不存在的字段返回 nil
127.0.0.1:6379> HGETALL myhash # 获取所有字段和值
1) "field1"
2) "Value1"
3) "field2"
4) "Value2"
5) "field3"
6) "Value3"
127.0.0.1:6379> HKEYS myhash # 获取所有字段名
1) "field1"
2) "field2"
3) "field3"
127.0.0.1:6379> HVALS myhash # 获取所有值
1) "Value1"
2) "Value2"
3) "Value3"
127.0.0.1:6379> HLEN myhash # 获取字段数量
(integer) 3
127.0.0.1:6379> HDEL myhash field2 # 删除字段
(integer) 1 # 返回成功删除的字段数量 -
Sets (集合): (唯一、无序的字符串集合)
127.0.0.1:6379> SADD myset "apple" "banana" "cherry" "apple" # 添加元素 ("apple" 只会添加一次)
(integer) 3 # 返回成功添加的新元素数量
127.0.0.1:6379> SMEMBERS myset # 获取所有成员 (顺序不定)
1) "cherry"
2) "banana"
3) "apple"
127.0.0.1:6379> SISMEMBER myset "banana" # 检查元素是否存在
(integer) 1 # 存在返回 1
127.0.0.1:6379> SISMEMBER myset "grape"
(integer) 0 # 不存在返回 0
127.0.0.1:6379> SCARD myset # 获取集合大小 (元素数量)
(integer) 3
127.0.0.1:6379> SREM myset "banana" # 移除元素
(integer) 1 # 返回成功移除的元素数量
127.0.0.1:6379> SADD set1 "a" "b" "c"
(integer) 3
127.0.0.1:6379> SADD set2 "c" "d" "e"
(integer) 3
127.0.0.1:6379> SINTER set1 set2 # 交集
1) "c"
127.0.0.1:6379> SUNION set1 set2 # 并集
1) "e"
2) "b"
3) "c"
4) "a"
5) "d"
127.0.0.1:6379> SDIFF set1 set2 # 差集 (set1 - set2)
1) "b"
2) "a" -
Sorted Sets (有序集合): (类似 Set,但每个元素关联一个 double 类型的 score,用于排序)
127.0.0.1:6379> ZADD myzset 1 "one" 2 "two" 3 "three" # 添加元素和分数
(integer) 3 # 返回成功添加的新元素数量
127.0.0.1:6379> ZADD myzset 2.5 "two_point_five"
(integer) 1
127.0.0.1:6379> ZRANGE myzset 0 -1 WITHSCORES # 按分数升序获取所有元素和分数
1) "one"
2) "1"
3) "two"
4) "2"
5) "two_point_five"
6) "2.5"
7) "three"
8) "3"
127.0.0.1:6379> ZREVRANGE myzset 0 -1 WITHSCORES # 按分数降序获取
1) "three"
2) "3"
3) "two_point_five"
4) "2.5"
5) "two"
6) "2"
7) "one"
8) "1"
127.0.0.1:6379> ZRANGEBYSCORE myzset 1.5 2.8 WITHSCORES # 按分数范围获取 (1.5 <= score <= 2.8)
1) "two"
2) "2"
3) "two_point_five"
4) "2.5"
127.0.0.1:6379> ZRANK myzset "two" # 获取元素的排名 (升序, 从 0 开始)
(integer) 1
127.0.0.1:6379> ZREVRANK myzset "two" # 获取元素的排名 (降序, 从 0 开始)
(integer) 2
127.0.0.1:6379> ZSCORE myzset "three" # 获取元素的分数
"3"
127.0.0.1:6379> ZCARD myzset # 获取有序集合的大小
(integer) 4
127.0.0.1:6379> ZREM myzset "two_point_five" # 移除元素
(integer) 1
通用命令:
KEYS <pattern>
: 查找匹配模式的键。警告: 在生产环境中对大量键使用KEYS *
或复杂模式可能阻塞服务器,应优先使用SCAN
。
127.0.0.1:6379> KEYS my*
1) "mykey"
2) "mylist"
3) "myhash"
4) "myset"
5) "myzset"SCAN <cursor> [MATCH <pattern>] [COUNT <count>]
: 增量迭代键空间,更安全。DEL <key1> [key2 ...]
删除一个或多个键。
127.0.0.1:6379> DEL mykey mylist
(integer) 2 # 返回成功删除的键数量EXISTS <key1> [key2 ...]
检查一个或多个键是否存在。
127.0.0.1:6379> EXISTS myhash myset non_exist_key
(integer) 2 # 返回存在的键数量TYPE <key>
返回键存储的值的类型 (string, list, set, zset, hash, stream)。
127.0.0.1:6379> TYPE myhash
hashEXPIRE <key> <seconds>
设置键的过期时间(秒)。
127.0.0.1:6379> SET tempkey "temporary data"
OK
127.0.0.1:6379> EXPIRE tempkey 60 # 60 秒后过期
(integer) 1TTL <key>
获取键的剩余生存时间(秒)。返回 -1 表示永不过期,-2 表示键不存在。
127.0.0.1:6379> TTL tempkey
(integer) 58 # (剩余时间)PERSIST <key>
移除键的过期时间,使其永不过期。RANDOMKEY
随机返回一个键。RENAME <oldkey> <newkey>
重命名键。如果新键已存在,其值会被覆盖。RENAMENX <oldkey> <newkey>
重命名键,但仅当新键不存在时才执行。INFO [section]
获取 Redis 服务器的信息和统计数据。INFO
或INFO all
显示所有信息,可以指定cpu
,memory
,replication
,stats
等部分。
127.0.0.1:6379> INFO memory
# Memory
used_memory:1041848
used_memory_human:1017.43K
...CONFIG GET <parameter>
获取服务器配置参数的值。
127.0.0.1:6379> CONFIG GET requirepass
1) "requirepass"
2) "" # (当前未设置密码)
127.0.0.1:6379> CONFIG GET *maxclients*
1) "maxclients"
2) "10000"CONFIG SET <parameter> <value>
动态修改服务器配置参数(并非所有参数都支持)。MONITOR
实时打印服务器接收到的所有命令请求,用于调试。警告: 该命令对性能有显著影响,仅在调试时短期使用。按 Ctrl+C 退出MONITOR
模式。QUIT
或EXIT
: 关闭连接并退出redis-cli
。
4. 非交互模式与脚本执行
除了交互模式,redis-cli
还可以在非交互模式下运行,直接从命令行执行单个命令或通过管道批量执行。
直接执行单个命令:
将 Redis 命令作为 redis-cli
的参数传递即可。redis-cli
会执行命令,打印结果到标准输出,然后退出。
“`bash
$ redis-cli PING
PONG
$ redis-cli GET mykey
“Hello Redis World”
$ redis-cli -n 1 LLEN mylist # 可以在命令前加连接选项
(integer) 1
$ redis-cli -a
(integer) 16
“`
通过管道传递命令:
可以将命令通过标准输入(stdin)管道给 redis-cli
。这对于执行多条命令或从文件读取命令非常有用。
-
使用
echo
:bash
$ echo "SET status online" | redis-cli
OK
$ echo "GET status" | redis-cli
"online" -
从文件读取命令:
假设有一个commands.txt
文件,内容如下:SET user:1:name Alice
SET user:1:age 30
SADD user:1:hobbies "reading" "hiking"可以通过以下方式执行:
bash
$ cat commands.txt | redis-cli
OK
OK
(integer) 2或者使用输入重定向:
bash
$ redis-cli < commands.txt
OK
OK
(integer) 2注意: 使用管道时,如果需要认证,密码选项(如
-a
或--askpass
)需要在redis-cli
命令本身上指定,而不是在管道输入的内容里。
5. redis-cli
的高级功能与模式
redis-cli
不仅仅是简单的命令执行器,还内置了一些强大的工具和模式。
5.1 键空间扫描 (--scan
, --pattern
)
如前所述,KEYS
命令在高负载或大数据集下可能阻塞服务器。SCAN
命令提供了一种基于游标的迭代方式,可以分批次、无阻塞地遍历键空间。redis-cli
提供了便捷的 --scan
选项来使用 SCAN
。
“`bash
扫描所有键 (每次迭代默认返回约 10 个)
redis-cli –scan
扫描匹配 ‘user:*’ 模式的键
redis-cli –scan –pattern ‘user:*’
“`
redis-cli
会自动处理游标,持续调用 SCAN
直到遍历完成,然后将所有匹配的键打印出来。这比手动管理 SCAN
游标方便得多。
5.2 延迟监控 (--latency
系列选项)
性能诊断是 Redis 运维的重要部分。redis-cli
提供了多种模式来测量和监控 Redis 服务器的延迟。
-
--latency
: 持续向服务器发送PING
命令,并实时显示 PING 命令的延迟(最小、最大、平均值等)。按 Ctrl+C 停止。bash
$ redis-cli --latency
min: 0, max: 1, avg: 0.18 (14768 samples) # 持续更新 -
--latency-history
: 类似--latency
,但会维护一个随时间变化的延迟样本,并默认每 15 秒刷新一次统计信息。bash
$ redis-cli --latency-history
min: 0, max: 1, avg: 0.17 (15017 samples) -- 15.01 seconds range
min: 0, max: 1, avg: 0.19 (14996 samples) -- 15.00 seconds range
... -
--latency-dist
: 以更详细的分布图形式显示延迟。它会显示不同延迟区间的百分比。“`bash
$ redis-cli –latency-dist_ PING দ্রব p50 p99 p99.9
(0 1ms) 99.87, 99.87, 99.87, 99.87 # 99.87% 的延迟在 0-1ms
(1 2ms) 0.13, 0.13, 0.13, 0.13 # 0.13% 的延迟在 1-2ms
“` -
--intrinsic-latency <duration_sec>
: 测量客户端本身(运行redis-cli
的机器)的固有延迟,即操作系统调度和网络栈处理一个简单事件所需的时间。这有助于判断观察到的 Redis 延迟中有多少是系统本身造成的。bash
$ redis-cli --intrinsic-latency 5 # 测量 5 秒
Min: 3 microseconds
Max: 81 microseconds
Avg: 6.12 microseconds (122676 samples)
... (some nice per-percentile report)
5.3 实时统计信息 (--stat
)
此模式会定期(默认每秒)执行 INFO
命令,并以易于阅读的格式显示关键统计信息的变化,非常适合实时监控服务器状态。
bash
$ redis-cli --stat
------- data ------ --------------------- load -------------------- - child -
keys mem clients blocked requests connections
5 1017.43K 1 0 16 (+0) 1
5 1017.43K 1 0 17 (+1) 1
... (持续更新, 显示新增请求数等)
可以指定刷新间隔:redis-cli --stat -i 5
(每 5 秒刷新一次)。
5.4 大 Key 分析 (--bigkeys
)
内存使用是 Redis 的关键考量。--bigkeys
模式通过采样(使用 SCAN
)的方式快速查找 Redis 实例中占用空间可能较大的键(”big keys”),并按数据类型进行总结。它不会扫描所有键,因此结果是近似的,但通常足以发现主要的内存消耗者。
“`bash
$ redis-cli –bigkeys
Scanning the entire keyspace to find biggest keys as well as
average sizes per 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 ‘…’ with size …
[05.13%] Biggest list found so far ‘…’ with size …
… (扫描过程)
——– summary ——-
Sampled 20 keys in the keyspace!
Total key length in bytes is 112 (avg len 5.60)
Biggest string found ‘mykey’ has 18 bytes
Biggest list found ‘mylist’ has 1 items
Biggest hash found ‘myhash’ has 3 fields
Biggest set found ‘myset’ has 2 items
Biggest zset found ‘myzset’ has 3 members
5 strings with 78 bytes (25.00% of keys, avg size 15.60)
1 lists with 1 items (05.00% of keys, avg size 1.00)
1 hashs with 3 fields (05.00% of keys, avg size 3.00)
1 sets with 2 members (05.00% of keys, avg size 2.00)
1 zsets with 3 members (05.00% of keys, avg size 3.00)
“`
5.5 管道模式 (--pipe
)
当你需要向 Redis 批量导入大量数据时,逐条发送命令效率很低。--pipe
模式允许你将遵循 Redis 协议格式(RESP – REdis Serialization Protocol)的数据流直接发送给服务器,服务器会批量处理,极大提高导入速度。
通常与 redis-cli --pipe
结合使用的是生成 RESP 格式数据的工具或脚本。例如,生成一个包含大量 SET
命令的 RESP 文件 data.txt
:
*3\r\n$3\r\nSET\r\n$5\r\nkey:1\r\n$6\r\nvalue1\r\n
*3\r\n$3\r\nSET\r\n$5\r\nkey:2\r\n$6\r\nvalue2\r\n
... (大量类似命令)
然后通过管道导入:
bash
$ cat data.txt | redis-cli --pipe
All data transferred. Waiting for the last reply...
Last reply received from server.
errors: 0, replies: 1000000 # (假设导入了 100 万条)
redis-cli
会负责将标准输入的数据打包发送,并读取服务器的响应。
5.6 Lua 脚本执行 (--eval
, EVAL
, EVALSHA
)
Redis 支持执行 Lua 脚本,以原子方式执行复杂的服务器端逻辑。redis-cli
提供了 --eval
选项来直接执行一个 Lua 脚本文件。
假设有一个 myscript.lua
文件:
lua
-- myscript.lua
-- 原子地获取 key 的值, 如果存在则加 1, 否则设置为 1
local current_val = redis.call('GET', KEYS[1])
if current_val then
return redis.call('INCRBY', KEYS[1], ARGV[1])
else
redis.call('SET', KEYS[1], ARGV[1])
return tonumber(ARGV[1])
end
执行脚本:
“`bash
./redis-cli –eval … , …
注意 KEYS 和 ARGV 之间的逗号 (前后可能有空格)
$ redis-cli –eval myscript.lua mycounter , 1
(integer) 1
$ redis-cli –eval myscript.lua mycounter , 5
(integer) 6
$ redis-cli GET mycounter
“6”
“`
KEYS
数组包含传递给脚本的键名,ARGV
数组包含附加参数。逗号用于分隔键和参数列表。1
在这里表示有一个键 (mycounter
),后面跟的是参数 (1
或 5
)。
在交互模式下,可以使用 EVAL
命令直接执行 Lua 脚本字符串,或使用 SCRIPT LOAD
加载脚本获取 SHA1 摘要,然后用 EVALSHA
通过摘要执行(更高效,节省带宽)。
127.0.0.1:6379> EVAL "return redis.call('SET', KEYS[1], ARGV[1])" 1 mykey value1
OK
127.0.0.1:6379> SCRIPT LOAD "return redis.call('GET', KEYS[1])"
"e719a718fide..." # 脚本的 SHA1 摘要
127.0.0.1:6379> EVALSHA e719a718fide... 1 mykey
"value1"
5.7 Cluster 模式 (-c
)
当连接到 Redis Cluster 时,需要使用 -c
选项启用集群模式。在此模式下,如果执行的命令操作的键不位于当前连接的节点上,redis-cli
会自动处理 MOVED
或 ASK
重定向,连接到正确的节点并重新发送命令。
bash
$ redis-cli -c -p 7000 # 连接到集群的一个入口节点
127.0.0.1:7000> SET foo bar
-> Redirected to slot [12182] located at 127.0.0.1:7002
OK
127.0.0.1:7002> GET foo
"bar"
127.0.0.1:7002> SET hello world
-> Redirected to slot [866] located at 127.0.0.1:7000
OK
127.0.0.1:7000> GET hello
"world"
没有 -c
选项时,遇到重定向会报错,需要手动连接到目标节点。
5.8 从模式 (--replica
)
--replica
(旧版本为 --slave
) 模式使 redis-cli
像一个从节点一样连接到主节点,并实时显示从主节点接收到的复制流。这对于调试复制问题非常有用。
bash
$ redis-cli -h <master_host> -p <master_port> --replica
SYNC with master, discarding 1 bytes of bulk transfer... # 开始同步
SYNC done. Logging commands from master.
"PING"
"SELECT","0"
"SET","mykey","master_value"
... (实时显示主节点执行的写命令)
6. 输出格式化与控制
redis-cli
提供了一些选项来控制输出的格式。
-
标准输出 (Pretty-printing): 默认情况下,
redis-cli
会对结果进行人性化的格式化,例如字符串加引号,数组显示索引等。这在交互模式下很方便阅读。 -
原始输出 (
--raw
): 当你需要将redis-cli
的输出直接用于脚本处理时,标准格式可能不方便。--raw
选项会让redis-cli
输出未经任何处理的原始服务器响应。“`bash
$ redis-cli GET mykey
“Hello Redis World”$ redis-cli –raw GET mykey
Hello Redis World$ redis-cli LRANGE mylist 0 -1
1) “world”$ redis-cli –raw LRANGE mylist 0 -1
world
“` -
CSV 输出 (
--csv
): 主要用于--latency-dist
等特定模式,将结果以 CSV 格式输出,方便导入到表格软件或进行数据分析。 -
无提示模式 (
-q
或--quiet
): 抑制连接成功等非命令结果的信息,在脚本中可能有用。
7. 实用技巧与最佳实践
- 谨慎使用
MONITOR
: 它会给服务器带来显著的性能开销,仅用于短时间调试。 - 生产环境禁用或慎用
KEYS
: 对于大数据集,KEYS
会阻塞服务器。优先使用SCAN
(redis-cli --scan
) 进行键遍历。 - 利用
INFO
:INFO
命令提供了关于服务器状态、内存、性能、复制等方面的宝贵信息,是监控和诊断的重要工具。 - 熟悉数据类型: 了解 Redis 的各种数据结构及其适用场景和命令,能让你更高效地使用 Redis。
- 使用
HELP
命令: 在redis-cli
交互模式下,HELP @<group>
可以列出特定命令组(如@string
,@list
,@set
,@hash
,@zset
,@server
,@connection
,@scripting
等)的命令。HELP <command>
可以查看具体命令的用法。 - 配置文件别名: 对于经常连接的 Redis 实例,可以在 shell 配置文件(如
.bashrc
,.zshrc
)中设置别名,简化连接命令:
bash
alias redis-dev='redis-cli -h dev.redis.local -p 6379'
alias redis-prod='redis-cli -h prod.redis.aws -p 6379 --askpass' - 理解 RESP: 了解 Redis 的通信协议 RESP 有助于理解命令的原始交互方式,特别是在使用
--pipe
模式或进行底层调试时。
8. 总结
redis-cli
是与 Redis 交互不可或缺的瑞士军刀。它不仅提供了执行基本命令的接口,还集成了连接管理、高级诊断工具(延迟监控、大 Key 分析、实时统计)、脚本执行、集群支持和高效数据导入等多种强大功能。
无论你是需要快速检查一个键值、调试复杂的 Lua 脚本、监控生产环境的性能,还是批量导入数据,redis-cli
都能提供有效的解决方案。熟练掌握 redis-cli
的各种选项和模式,将极大提升你使用和管理 Redis 的效率和能力。
希望本指南能帮助你更深入地理解和运用 redis-cli
,充分发挥这个强大工具的潜力。不断实践,探索其更多可能性,你将发现 redis-cli
比初看起来要强大得多。