Redis CLI 使用教程 – wiki基地


深入浅出:Redis CLI 使用完全指南

Redis 是一个高性能的键值存储系统,常用于缓存、队列、实时统计、消息发布/订阅等场景。与许多数据库系统一样,Redis 提供了一个功能强大且易于使用的命令行接口(CLI)工具,redis-cli。这个工具是与 Redis 服务器进行交互、执行命令、监控状态、进行故障排查和管理的核心手段。

本文将带你深入了解 redis-cli 的方方面面,从最基本的连接、执行命令到复杂的事务、脚本和服务器管理,为你提供一个全面的使用指南。

第一部分:Redis CLI 入门

1. 什么是 Redis CLI?

redis-cli 是 Redis 自带的命令行客户端程序。它允许用户直接向 Redis 服务器发送命令,并显示服务器返回的结果。无论是开发、测试还是运维,redis-cli 都是必不可少的工具。

2. 安装与启动 Redis CLI

redis-cli 通常与 Redis 服务器一起安装。如果你已经安装了 Redis,那么 redis-cli 应该已经在你的系统路径中。

  • Linux/macOS: 如果使用包管理器安装 Redis(如 apt-get install redis-serverbrew install redis),redis-cli 会被一同安装。
  • Windows: 如果从官网下载 zip 包,redis-cli.exe 在解压后的目录中。

安装完成后,打开终端或命令提示符,输入 redis-cli 即可启动。

3. 连接 Redis 服务器

redis-cli 默认尝试连接本地主机 (127.0.0.1) 端口 6379 上的 Redis 服务器。

bash
redis-cli

如果连接成功,你将看到类似以下的提示符:

127.0.0.1:6379>

这表示你已经成功连接到服务器,可以开始输入命令了。

连接到不同的主机或端口:

如果 Redis 服务器不在本地默认端口,你需要指定主机和端口:

bash
redis-cli -h <host> -p <port>

例如,连接到 IP 为 192.168.1.100、端口为 6380 的服务器:

bash
redis-cli -h 192.168.1.100 -p 6380

使用密码进行认证:

如果你的 Redis 服务器配置了密码(requirepass),连接后需要进行认证:

bash
redis-cli -a <password>

或者先连接,然后在命令行中使用 AUTH 命令:

127.0.0.1:6379> AUTH your_password
OK
127.0.0.1:6379>

你也可以在连接时同时指定主机、端口和密码:

bash
redis-cli -h 192.168.1.100 -p 6380 -a your_password

4. 基本交互与命令

连接成功后,你可以直接在 > 提示符后输入 Redis 命令。

PING 命令:

最简单的命令是 PING,用于检查服务器是否存活。

127.0.0.1:6379> PING
PONG

服务器返回 PONG 表示一切正常。

ECHO 命令:

ECHO 命令会将你发送的字符串返回。

127.0.0.1:6379> ECHO "Hello, Redis!"
"Hello, Redis!"

QUIT 命令:

退出 redis-cli 客户端:

127.0.0.1:6379> QUIT

或者直接使用 Ctrl+C 组合键。

5. 获取命令帮助

redis-cli 内置了帮助系统,可以方便地查看命令的用法。

HELP 命令:

输入 HELP 可以看到所有命令的分类列表。

127.0.0.1:6379> HELP
... (输出大量命令分类)

HELP

查看特定命令的详细帮助信息。例如,查看 SET 命令的帮助:

“`
127.0.0.1:6379> HELP SET

SET key value [EX seconds|PX milliseconds|EXAT unix-time-seconds|PXAT unix-time-milliseconds|KEEPTTL] [NX|XX] [GET]
summary: Set the string value of a key
since: 2.0.0
… (输出详细信息,包括选项、返回值等)
“`

这个帮助信息非常有用,它告诉你命令的语法、参数、作用、版本信息以及相关的命令。

6. 认识命令返回值

Redis 命令的返回值有不同的类型,redis-cli 会以人类可读的方式显示它们。了解返回值类型对于理解命令执行结果非常重要:

  • 状态回复 (Status Reply): 简单的字符串状态,如 OK
  • 错误回复 (Error Reply):(error) 开头,表示命令执行失败。
  • 整数回复 (Integer Reply): 返回一个整数,如 INCR 命令的返回值。
  • 批量字符串回复 (Bulk String Reply): 返回一个字符串值,如 GET 命令的返回值。如果键不存在,返回 (nil)
  • 多批量字符串回复 (Multi Bulk Reply): 返回一个列表,包含多个批量字符串回复或其他回复类型,如 LRANGEHGETALL 命令的返回值。

“`
127.0.0.1:6379> SET mykey “hello”
OK ; 状态回复

127.0.0.1:6379> GET mykey
“hello” ; 批量字符串回复

127.0.0.1:6379> GET nonexistkey
(nil) ; 批量字符串回复,表示空值

127.0.0.1:6379> LRANGE mylist 0 -1
(empty array) ; 多批量字符串回复,空列表

127.0.0.1:6379> INCR mycounter
(integer) 1 ; 整数回复

127.0.0.1:6379> NONEXISTCOMMAND
(error) unknown command ‘NONEXISTCOMMAND’ ; 错误回复
“`

第二部分:核心数据类型操作

Redis CLI 的主要用途是与存储在 Redis 中的数据进行交互。Redis 支持多种数据结构,每种结构都有一套特定的命令。下面我们将详细介绍几种核心数据类型的常用 CLI 命令。

1. 字符串 (Strings)

字符串是 Redis 中最基础的数据类型,可以存储文本、二进制数据或序列化的对象。

  • SET key value: 设置指定键的值。
    127.0.0.1:6379> SET mykey "Hello Redis"
    OK
  • GET key: 获取指定键的值。
    127.0.0.1:6379> GET mykey
    "Hello Redis"

    如果键不存在:
    127.0.0.1:6379> GET nonexistkey
    (nil)
  • DEL key [key …]: 删除一个或多个键。
    127.0.0.1:6379> DEL mykey
    (integer) 1 ; 返回删除的键的数量
  • EXISTS key [key …]: 检查键是否存在。
    127.0.0.1:6379> EXISTS mykey
    (integer) 0 ; 不存在
    127.0.0.1:6379> SET mykey "abc"
    OK
    127.0.0.1:6379> EXISTS mykey
    (integer) 1 ; 存在
  • INCR key: 将存储在键上的数字加一。如果键不存在,则在执行操作之前将其设置为 0。
    127.0.0.1:6379> SET counter 10
    OK
    127.0.0.1:6379> INCR counter
    (integer) 11
    127.0.0.1:6379> INCR another_counter
    (integer) 1
  • DECR key: 将存储在键上的数字减一。
    127.0.0.1:6379> DECR counter
    (integer) 10
  • INCRBY key increment: 将键上的数字增加指定的增量。
    127.0.0.1:6379> INCRBY counter 5
    (integer) 15
  • DECRBY key decrement: 将键上的数字减少指定的减量。
    127.0.0.1:6379> DECRBY counter 3
    (integer) 12
  • APPEND key value: 如果键存在,则将值追加到现有值的末尾。如果键不存在,则创建一个新键并设置为该值(类似于 SET)。
    127.0.0.1:6379> APPEND greeting "Hello"
    (integer) 5 ; 返回新字符串的长度
    127.0.0.1:6379> APPEND greeting " World"
    (integer) 11
    127.0.0.1:6379> GET greeting
    "Hello World"

2. 列表 (Lists)

列表是一个有序的字符串集合,可以从两端(左边或右边)推入或弹出元素。适合做队列、栈等。

  • LPUSH key element [element …]: 将一个或多个值插入到列表的头部(最左边)。
    127.0.0.1:6379> LPUSH mylist "world"
    (integer) 1
    127.0.0.1:6379> LPUSH mylist "hello"
    (integer) 2

    此时列表是 ["hello", "world"]
  • RPUSH key element [element …]: 将一个或多个值插入到列表的尾部(最右边)。
    127.0.0.1:6379> RPUSH mylist "!"
    (integer) 3

    列表变为 ["hello", "world", "!"]
  • LPOP key: 移除并返回列表的头部元素。
    127.0.0.1:6379> LPOP mylist
    "hello"

    列表变为 ["world", "!"]
  • RPOP key: 移除并返回列表的尾部元素。
    127.0.0.1:6379> RPOP mylist
    "!"

    列表变为 ["world"]
  • LRANGE key start stop: 获取列表中指定范围内的元素。索引从 0 开始,-1 表示最后一个元素。
    127.0.0.1:6379> RPUSH mylist "a" "b" "c" "d" "e"
    (integer) 6
    127.0.0.1:6379> LRANGE mylist 0 -1 ; 获取所有元素
    1) "world"
    2) "a"
    3) "b"
    4) "c"
    5) "d"
    6) "e"
    127.0.0.1:6379> LRANGE mylist 1 3 ; 获取索引 1 到 3 的元素
    1) "a"
    2) "b"
    3) "c"
  • LLEN key: 获取列表的长度。
    127.0.0.1:6379> LLEN mylist
    (integer) 6

3. 集合 (Sets)

集合是一个无序的、不重复的字符串集合。适用于存储唯一的元素,如标签、用户ID等。

  • SADD key member [member …]: 将一个或多个成员添加到集合。如果成员已存在,则忽略。
    127.0.0.1:6379> SADD myset "apple"
    (integer) 1
    127.0.0.1:6379> SADD myset "banana" "cherry"
    (integer) 2
    127.0.0.1:6379> SADD myset "apple" ; "apple" 已存在,不添加
    (integer) 0
  • SMEMBERS key: 返回集合中的所有成员。由于集合是无序的,返回顺序不确定。
    127.0.0.1:6379> SMEMBERS myset
    1) "cherry"
    2) "apple"
    3) "banana"
  • SISMEMBER key member: 检查一个成员是否存在于集合中。
    127.0.0.1:6379> SISMEMBER myset "apple"
    (integer) 1 ; 存在
    127.0.0.1:6379> SISMEMBER myset "grape"
    (integer) 0 ; 不存在
  • SCARD key: 获取集合的成员数量。
    127.0.0.1:6379> SCARD myset
    (integer) 3
  • SREM key member [member …]: 从集合中移除一个或多个成员。
    127.0.0.1:6739> SREM myset "banana"
    (integer) 1 ; 移除成功
    127.0.0.1:6739> SMEMBERS myset
    1) "cherry"
    2) "apple"
  • SUINION key [key …]: 返回多个集合的并集。
    127.0.0.1:6379> SADD set1 "a" "b"
    (integer) 2
    127.0.0.1:6379> SADD set2 "b" "c"
    (integer) 2
    127.0.0.1:6379> SUNION set1 set2
    1) "c"
    2) "b"
    3) "a"
  • SINTER key [key …]: 返回多个集合的交集。
    127.0.0.1:6379> SINTER set1 set2
    1) "b"
  • SDIFF key [key …]: 返回第一个集合与其它集合的差集。
    127.0.0.1:6379> SDIFF set1 set2
    1) "a"
    127.0.0.1:6379> SDIFF set2 set1
    1) "c"

4. 哈希 (Hashes)

哈希是一个键值对的集合,其中键是字段 (field),值是与字段关联的值。适合存储对象的属性。

  • HSET key field value [field value …]: 设置哈希中一个或多个字段的值。如果哈希不存在,会创建。
    127.0.0.1:6379> HSET user:1 name "Alice" age 30 city "New York"
    (integer) 3 ; 返回新添加的字段数量
  • HGET key field: 获取哈希中指定字段的值。
    12度的0.0.1:6379> HGET user:1 name
    "Alice"
    127.0.0.1:6379> HGET user:1 email
    (nil) ; 字段不存在
  • HGETALL key: 获取哈希中所有字段和值。
    127.0.0.1:6379> HGETALL user:1
    1) "name"
    2) "Alice"
    3) "age"
    4) "30"
    5) "city"
    6) "New York"
  • HMGET key field [field …]: 获取哈希中一个或多个字段的值。
    127.0.0.1:6379> HMGET user:1 name city
    1) "Alice"
    2) "New York"
  • HDEL key field [field …]: 删除哈希中的一个或多个字段。
    127.0.0.1:6379> HDEL user:1 city
    (integer) 1 ; 返回成功删除的字段数量
    127.0.0.1:6379> HGETALL user:1
    1) "name"
    2) "Alice"
    3) "age"
    4) "30"
  • HKEYS key: 获取哈希中所有字段名。
    127.0.0.1:6379> HKEYS user:1
    1) "name"
    2) "age"
  • HVALS key: 获取哈希中所有字段值。
    127.0.0.1:6379> HVALS user:1
    1) "Alice"
    2) "30"
  • HLEN key: 获取哈希中字段的数量。
    127.0.0.1:6379> HLEN user:1
    (integer) 2

5. 有序集合 (Sorted Sets)

有序集合是集合中每个成员都关联一个分数(score),并通过分数来进行排序。成员是唯一的,但分数可以重复。常用于排行榜、带有优先级的队列等。

  • ZADD key score member [score member …]: 添加一个或多个成员及其分数到有序集合。如果成员已存在,更新其分数。
    127.0.0.1:6379> ZADD myzset 10 "memberA"
    (integer) 1
    127.0.0.1:6379> ZADD myzset 20 "memberB" 30 "memberC"
    (integer) 2
    127.0.0.1:6379> ZADD myzset 15 "memberB" ; 更新 memberB 的分数
    (integer) 0
  • ZRANGE key start stop [WITHSCORES]: 返回有序集合中指定索引范围内的成员。索引从 0 开始,-1 是最后一个。WITHSCORES 可选,用于同时返回分数。
    127.0.0.1:6379> ZRANGE myzset 0 -1 ; 按分数升序排列
    1) "memberA"
    2) "memberB"
    3) "memberC"
    127.0.0.1:6379> ZRANGE myzset 0 -1 WITHSCORES
    1) "memberA"
    2) "10"
    3) "memberB"
    4) "15"
    5) "memberC"
    6) "30"
  • ZREVRANGE key start stop [WITHSCORES]: 按分数降序返回指定索引范围内的成员。
    127.0.0.1:6379> ZREVRANGE myzset 0 -1 WITHSCORES
    1) "memberC"
    2) "30"
    3) "memberB"
    4) "15"
    5) "memberA"
    6) "10"
  • ZRANK key member: 返回成员在有序集合中的排名(索引),按分数升序排列。
    127.0.0.1:6379> ZRANK myzset "memberB"
    (integer) 1 ; memberA (0), memberB (1), memberC (2)
  • ZREVRANK key member: 返回成员在有序集合中的排名,按分数降序排列。
    12个.0.0.1:6379> ZREVRANK myzset "memberB"
    (integer) 1 ; memberC (0), memberB (1), memberA (2)
  • ZSCORE key member: 获取成员的分数。
    127.0.0.1:6379> ZSCORE myzset "memberB"
    "15"
  • ZCARD key: 获取有序集合的成员数量。
    127.0.0.1:6379> ZCARD myzset
    (integer) 3
  • ZREM key member [member …]: 从有序集合中移除一个或多个成员。
    127.0.0.1:6379> ZREM myzset "memberA"
    (integer) 1
    127.0.0.1:6379> ZRANGE myzset 0 -1 WITHSCORES
    1) "memberB"
    2) "15"
    3) "memberC"
    4) "30"

第三部分:键管理和过期时间

除了特定的数据类型命令,Redis 还提供了一系列用于管理键本身的通用命令。

  • KEYS pattern: 查找所有符合给定模式的键。
    127.0.0.1:6379> KEYS * ; 查找所有键
    1) "user:1"
    2) "myset"
    3) "counter"
    4) "myzset"
    5) "mylist"
    6) "greeting"
    127.0.0.1:6379> KEYS user:* ; 查找所有以 user: 开头的键
    1) "user:1"

    重要提示: KEYS 命令会遍历所有键,对于生产环境中有大量键的实例,这会阻塞服务器,绝对不要在生产环境中使用 KEYS * 或返回大量结果的模式。请使用 SCAN 命令代替。

  • SCAN cursor [MATCH pattern] [COUNT count]: 迭代键空间。这是一个非阻塞的方式,可以在生产环境中使用。
    127.0.0.1:6379> SCAN 0 ; 从游标 0 开始扫描
    1) "3" ; 下一次扫描的游标 (如果为 0 表示扫描结束)
    2) 1) "user:1"
    2) "myset"
    3) "counter"
    127.0.0.1:6379> SCAN 3 MATCH my* COUNT 10 ; 从游标 3 开始,匹配 my*,每次返回最多 10 个
    1) "0"
    2) 1) "myzset"
    2) "mylist"

    SCAN 命令返回两个值:下一个游标和当前迭代的键列表。你需要不断地使用返回的游标作为下一次 SCAN 的输入,直到游标为 0。

  • TYPE key: 获取键存储的值的数据类型。
    127.0.0.1:6379> TYPE user:1
    hash
    127.0.0.1:6379> TYPE mylist
    list
    127.0.0.1:6379> TYPE nonexistkey
    none

  • EXPIRE key seconds: 设置键的过期时间(秒)。到期后键会被自动删除。
    127.0.0.1:6379> SET session:user:123 "session_data"
    OK
    127.0.0.1:6379> EXPIRE session:user:123 60 ; 设置 60 秒过期
    (integer) 1

  • TTL key: 获取键的剩余生存时间(秒)。
    127.0.0.1:6379> TTL session:user:123
    (integer) 55 ; 剩余 55 秒 (示例值)
    127.0.0.1:6379> TTL nonexistkey
    (integer) -2 ; 键不存在
    127.0.0.1:6379> PERSIST mykey ; mykey 没有设置过期时间
    (integer) -1 ; 键存在,但没有设置过期时间
  • PERSIST key: 移除键的过期时间,使其永不过期。
    127.0.0.1:6379> PERSIST session:user:123
    (integer) 1 ; 移除成功
    127.0.0.1:6379> TTL session:user:123
    (integer) -1
  • RENAME oldkey newkey: 重命名一个键。
    127.0.0.1:6379> RENAME user:1 user:profile:1
    OK
    127.0.0.1:6379> EXISTS user:1
    (integer) 0
    127.0.0.1:6379> EXISTS user:profile:1
    (integer) 1
  • RENAMENX oldkey newkey: 仅当新键名不存在时才重命名键。

第四部分:服务器管理与监控

redis-cli 不仅用于数据操作,也是强大的服务器管理和监控工具。

  • INFO [section]: 获取服务器的各种信息和统计数据。
    127.0.0.1:6379> INFO ; 获取所有信息
    # Server
    redis_version:6.2.6
    redis_git_sha1:d570e7c0
    redis_build_id:8223f35784630709
    ...
    # Memory
    used_memory:963344
    used_memory_human:940.77K
    ...
    # Stats
    total_connections_received:10
    total_commands_processed:50
    ...

    你可以指定不同的 section,如 INFO memoryINFO stats 来获取特定类别的信息。
  • CLIENT LIST: 列出所有连接到服务器的客户端信息。
    127.0.0.1:6379> CLIENT LIST
    id=4 addr=127.0.0.1:51042 fd=9 name= age=10 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client

    这对于查看当前活动连接、定位问题客户端很有帮助。
  • MONITOR: 实时打印服务器接收到的所有命令。这会产生很大的输出,并且有性能开销,只在调试时短暂使用。
    127.0.0.1:6379> MONITOR
    OK
    1678849000.123456 [0 127.0.0.1:51042] "PING"
    1678849001.789012 [0 127.0.0.1:51042] "GET" "mykey"
    ... (会显示所有其他客户端发送的命令)
  • SLOWLOG GET [count]: 获取慢查询日志。默认记录执行时间超过 slowlog-log-slower-than 配置值的命令。
    127.0.0.1:6379> SLOWLOG GET 10 ; 获取最新的 10 条慢查询日志
    ... (返回慢查询列表,包含时间戳、命令、执行时间等信息)

    SLOWLOG RESET 可以清空慢查询日志。
  • SAVE: 同步保存数据到磁盘。这会阻塞所有客户端。
  • BGSAVE: 在后台异步保存数据到磁盘。这是推荐的保存方式。
  • LASTSAVE: 获取上次成功将数据保存到磁盘的时间戳。
  • SHUTDOWN [NOSAVE|SAVE]: 关闭服务器。NOSAVE 不保存,SAVE 保存。默认是根据配置决定是否保存。
  • CONFIG GET parameter: 获取服务器配置参数的值。
    127.0.0.1:6379> CONFIG GET requirepass
    1) "requirepass"
    2) "" ; 如果没有设置密码
    127.0.0.1:6379> CONFIG GET maxmemory
    1) "maxmemory"
    2) "0" ; 0 表示无限制
  • CONFIG SET parameter value: 设置服务器配置参数的值。请注意,有些配置项只能通过修改配置文件并重启服务器生效,有些可以通过 CONFIG SET 临时修改,但可能不会持久化到配置文件(除非执行 CONFIG REWRITE)。
    127.0.0.1:6379> CONFIG SET maxmemory 1gb
    OK
  • CONFIG REWRITE: 将当前运行的配置写入到 Redis 配置文件中。仅适用于支持通过 CONFIG SET 修改的配置项。
  • DBSIZE: 返回当前数据库的键数量。
    127.0.0.1:6379> DBSIZE
    (integer) 6
  • SELECT index: 切换到指定的数据库。Redis 默认有 16 个数据库 (0-15),可以通过配置文件修改。
    127.0.0.1:6379> SELECT 1
    OK
    127.0.0.0:1> SET db1key "hello"
    OK
    127.0.0.0:1> SELECT 0
    OK
    127.0.0.1:6379> GET db1key
    (nil) ; 在 db0 看不到 db1 的键

第五部分:事务与脚本

Redis 支持事务(有限的原子性)和 Lua 脚本(强大的原子性)。

1. 事务 (Transactions)

Redis 事务通过 MULTI, EXEC, DISCARD 命令实现。它将一组命令打包,一起发送给服务器,保证在 EXEC 执行前不会被其他客户端的命令打断。但它不像传统数据库事务那样支持回滚所有命令,只有在语法错误时才会全部取消,执行中的命令错误只会影响单个命令,不会导致之前或之后的命令回滚。

  • MULTI: 标记一个事务块的开始。
  • EXEC: 执行所有事务块内的命令。
  • DISCARD: 取消事务,放弃执行事务块内的所有命令。
  • WATCH key [key …]: 在事务执行前监视一个或多个键。如果在 EXEC 执行前被 WATCH 的键被修改,事务将被取消(EXEC 返回 (nil))。

示例:

127.0.0.1:6379> MULTI ; 开始事务
OK
127.0.0.1:6379> SET transaction_key "value1" ; 命令入队
QUEUED
127.0.0.1:6379> INCR transaction_counter ; 命令入队
QUEUED
127.0.0.1:6379> EXEC ; 执行事务
1) OK ; SET 命令的返回值
2) (integer) 1 ; INCR 命令的返回值

如果执行过程中有错误(例如对非数字类型的键执行 INCR),只有该命令会返回错误,其他命令依然会执行(如果它们没有语法错误)。

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> SET mykey "hello"
QUEUED
127.0.0.1:6379> INCR mykey ; 对字符串执行 INCR 会出错
QUEUED
127.0.0.1:6379> SET anotherkey "world"
QUEUED
127.0.0.1:6379> EXEC
1) OK
2) (error) ERR value is not an integer or out of range
3) OK

2. Lua 脚本 (Scripting)

Redis 内嵌了 Lua 解释器,可以通过 EVAL 命令执行 Lua 脚本。Lua 脚本在执行过程中是原子性的,不会被其他命令打断。这使得它非常适合执行复杂的、需要原子性保证的操作。

  • EVAL script numkeys key [key …] arg [arg …]: 执行 Lua 脚本。
    • script: 要执行的 Lua 脚本字符串。
    • numkeys: 脚本中用到的键的数量。
    • key [key ...]: 脚本中用到的键列表,可以通过 KEYS[1], KEYS[2] 等访问。
    • arg [arg ...]: 脚本中用到的参数列表,可以通过 ARGV[1], ARGV[2] 等访问。

示例:原子性地获取并设置一个键的值

127.0.0.1:6379> SET mylua_key "initial"
OK
127.0.0.0:6379> EVAL "local current_value = redis.call('GET', KEYS[1]); redis.call('SET', KEYS[1], ARGV[1]); return current_value;" 1 mylua_key "new_value"
"initial" ; 返回脚本执行前的值
127.0.0.1:6379> GET mylua_key
"new_value" ; 值已经被更新

  • EVALSHA sha1 numkeys key [key …] arg [arg …]: 通过脚本的 SHA1 校验和执行脚本。这可以避免每次都发送完整的脚本内容,提高效率。脚本可以通过 SCRIPT LOAD 命令预加载到服务器,并获取其 SHA1。

第六部分:其他高级 CLI 功能和技巧

redis-cli 提供了一些命令行参数和模式,可以用于更高级的交互和分析。

  • --raw: 以原始格式输出回复,不进行格式化。对于处理包含特殊字符或需要精确字节的响应很有用。
    bash
    redis-cli --raw GET mykey
    Hello Redis
  • --latency: 监控 Redis 实例的延迟。
    bash
    redis-cli --latency
    min: 0, max: 1, avg: 0.23 (981 samples) ; 持续测量并输出延迟统计
  • --stat: 实时显示 Redis 实例的统计信息,类似于 INFO stats 的简化版和动态版。
    bash
    redis-cli --stat
    ------- summary -------
    connected_clients:1
    mem_usage:940.77K
    used_memory_peak:940.77K
    ... (每秒更新)
  • --scan: 使用 SCAN 命令来迭代键空间,比手动输入 SCAN 方便。
    bash
    redis-cli --scan --pattern "user:*"
    user:1
    user:profile:1
  • --pipe: 启用管道模式。可以将一系列 Redis 命令通过标准输入传递给 redis-cli,由 CLI 批量发送到服务器,提高命令执行效率。常用于导入数据。
    bash
    (echo "SET key1 value1"; echo "SET key2 value2") | redis-cli --pipe

    或者从文件导入:
    bash
    cat commands.txt | redis-cli --pipe

    commands.txt 文件内容示例:
    SET keyA valueA
    RPUSH mylist item1 item2
    SADD myset memberX
  • --rdb <filename>: 将服务器的 RDB 持久化文件下载到本地。
    bash
    redis-cli --rdb /tmp/dump.rdb
  • 连接 Sentinel: redis-cli -h <sentinel_host> -p <sentinel_port> --sentinel 可以连接到 Redis Sentinel,执行如 SENTINEL masters 等命令。
  • 连接 Cluster: redis-cli -c -h <cluster_node_host> -p <cluster_node_port> 可以连接到 Redis Cluster 的任一节点,CLI 会自动处理命令的重定向。

第七部分:使用 CLI 时的最佳实践和技巧

  • 使用 SCAN 代替 KEYS 在生产环境遍历键时,永远使用 SCAN 以避免阻塞服务器。
  • 理解命令的原子性: Redis 的大部分单个命令是原子性的,但复杂操作可能需要事务或 Lua 脚本来保证原子性。
  • 注意 MONITORSLOWLOG 的开销: 这些命令对于调试很有用,但在高负载环境下可能影响性能,谨慎使用。
  • 利用 --raw--pipe 进行数据导入导出或自动化: 这些模式在批量操作时非常高效。
  • 阅读官方文档: redis-cliHELP 命令很方便,但官方网站上的命令参考文档是最新、最全面的资源。
  • 安全: 连接到需要密码的服务器时使用 -a 参数或 AUTH 命令。避免在不安全的网络中无密码暴露 Redis 实例。

结论

redis-cli 是与 Redis 交互的强大工具,提供了从基本的数据操作到复杂的服务器管理和监控的全方位功能。通过本文的详细介绍,你应该已经掌握了 redis-cli 的核心用法和各种功能。

记住,实践是最好的学习方式。连接到你的 Redis 实例,多尝试不同的命令,结合 HELP 命令和官方文档,你将能更熟练地驾驭 Redis,充分发挥其高性能和丰富数据结构的优势。无论是开发新应用、调试现有系统还是维护生产环境,redis-cli 都将是你最得力的助手之一。


发表评论

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

滚动至顶部