Redis 命令行接口 redis-cli 完全指南 – wiki基地


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 -p

示例: 连接到 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
    hash
  • EXPIRE <key> <seconds> 设置键的过期时间(秒)。
    127.0.0.1:6379> SET tempkey "temporary data"
    OK
    127.0.0.1:6379> EXPIRE tempkey 60 # 60 秒后过期
    (integer) 1
  • TTL <key> 获取键的剩余生存时间(秒)。返回 -1 表示永不过期,-2 表示键不存在。
    127.0.0.1:6379> TTL tempkey
    (integer) 58 # (剩余时间)
  • PERSIST <key> 移除键的过期时间,使其永不过期。
  • RANDOMKEY 随机返回一个键。
  • RENAME <oldkey> <newkey> 重命名键。如果新键已存在,其值会被覆盖。
  • RENAMENX <oldkey> <newkey> 重命名键,但仅当新键不存在时才执行。
  • INFO [section] 获取 Redis 服务器的信息和统计数据。INFOINFO 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 模式。
  • QUITEXIT: 关闭连接并退出 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 INCR counter
(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),后面跟的是参数 (15)。

在交互模式下,可以使用 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 会自动处理 MOVEDASK 重定向,连接到正确的节点并重新发送命令。

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 比初看起来要强大得多。


发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部