深入浅出: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-server
或brew 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): 返回一个列表,包含多个批量字符串回复或其他回复类型,如
LRANGE
、HGETALL
命令的返回值。
“`
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 memory
、INFO 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 脚本来保证原子性。
- 注意
MONITOR
和SLOWLOG
的开销: 这些命令对于调试很有用,但在高负载环境下可能影响性能,谨慎使用。 - 利用
--raw
和--pipe
进行数据导入导出或自动化: 这些模式在批量操作时非常高效。 - 阅读官方文档:
redis-cli
的HELP
命令很方便,但官方网站上的命令参考文档是最新、最全面的资源。 - 安全: 连接到需要密码的服务器时使用
-a
参数或AUTH
命令。避免在不安全的网络中无密码暴露 Redis 实例。
结论
redis-cli
是与 Redis 交互的强大工具,提供了从基本的数据操作到复杂的服务器管理和监控的全方位功能。通过本文的详细介绍,你应该已经掌握了 redis-cli
的核心用法和各种功能。
记住,实践是最好的学习方式。连接到你的 Redis 实例,多尝试不同的命令,结合 HELP
命令和官方文档,你将能更熟练地驾驭 Redis,充分发挥其高性能和丰富数据结构的优势。无论是开发新应用、调试现有系统还是维护生产环境,redis-cli
都将是你最得力的助手之一。